C++ 我是否可以防止某些函数在C++;

C++ 我是否可以防止某些函数在C++;,c++,inheritance,C++,Inheritance,示例代码 #include <iostream> using namespace std; class Base { public: virtual void Func() { cout << "\nIn base func"; } }; class Derived : public Base { public: void Func() { cout << "\nIn derived

示例代码

#include <iostream>

using namespace std;

class Base
{
public:
    virtual void Func()
    {
        cout << "\nIn base func";
    }
};

class Derived : public Base
{
public:
    void Func()
    {
        cout << "\nIn derived";
    }
};

class Derived2 : public Derived
{
public:
    void Func()
    {
        cout << "\nIn derived2";
    }
};

int main()
{
    Base* lnewbase = new Derived2();

    lnewbase->Func();

    return 0;
}
#包括
使用名称空间std;
阶级基础
{
公众:
虚空函数()
{

CUT< P>不;C++没有等同于C的<代码>密封< /代码>修饰符。

< P> >没有什么可以做。

一旦你在一个基类虚拟中创建了一个函数,就没有办法摆脱它的这一方面。我只能想一些事情来解决它:

  • 不要把它虚拟化
  • Derived
    中创建一个新的、公共的、非虚拟的函数,它可以满足您的需要

然而,在这两种情况下,
Derived2
仍然能够制作自己版本的
Func()
,这将给您带来同样的问题。

我认为您使用的“继承的”是误导性的——相反,我会说“我能不能防止某个函数在C++中被重载?”这让我觉得你不希望子类的实例可以访问该函数(你可以通过在子类中将其声明为private来实现)。这是一个危险的编辑,与OP最初提出的问题有很大不同。我不认为你可以假设OP在说“继承”时表示“覆盖”,即使后者的答案是“不,那是不可能的。”与
sealed
的类比可能会产生误导,因为OP可能只是误解了
sealed
在这种情况下的实际功能。@Edward:我不认为这有误导性。引用你的
我希望子类的实例不能访问该函数,但我不能将其设置为私有,因为这样客户端将无法访问该函数访问它。如果我错了,请纠正我,但是
重载
继承的
过度使用的
没有完全不同的含义吗?你想让每个人都能调用这个函数,除了子类?如果它是公共的,它是公共的。@Samaursa-如果它是公共的,每个人都能看到它,尤其是子类。哟我们最好的办法是在文档中添加“不要重写此函数!”。C++03没有,但C++11有
final
成员函数装饰器,它直接类似于C#和C++/CLI的
sealed