示例代码
#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#中),这就是为什么没有虚拟关键字,虽然我知道它在这种情况下不会改变任何东西。有没有办法在确保它仍然是公共方法的同时禁止继承该函数?
答案 0 :(得分:0)
没有; C ++没有C#的sealed
修饰符。
答案 1 :(得分:0)
你无能为力。
一旦你在虚拟基类中创建了一个函数,就没有什么办法可以去除它的那个方面。我只能想到几件可以解决它的事情:
Derived
中创建一个新的,公共的,非虚拟的功能,以满足您的需求。但是,在任何一种情况下,Derived2
仍然可以制作自己的Func()
版本,这会给您带来同样的问题。