我可以保留某些函数不被C ++继承

时间:2011-05-31 16:57:06

标签: 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";
    }
};

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

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

    lnewbase->Func();

    return 0;
}

作为一个例子,在上面的代码中,我不希望继承的Func()被继承(密封在C#中),这就是为什么没有虚拟关键字,虽然我知道它在这种情况下不会改变任何东西。有没有办法在确保它仍然是公共方法的同时禁止继承该函数?

2 个答案:

答案 0 :(得分:0)

没有; C ++没有C#的sealed修饰符。

答案 1 :(得分:0)

你无能为力。

一旦你在虚拟基类中创建了一个函数,就没有什么办法可以去除它的那个方面。我只能想到几件可以解决它的事情:

  • 不要虚拟;
  • Derived中创建一个新的,公共的,非虚拟的功能,以满足您的需求。

但是,在任何一种情况下,Derived2仍然可以制作自己的Func()版本,这会给您带来同样的问题。

相关问题