【发布时间】:2011-08-24 14:42:53
【问题描述】:
我使用库中的 A 类,并希望通过自己的 B 类为其添加一些功能。 B 类的用户应该从它派生,就像他从 A 类派生一样。
class A {
public:
virtual void func1()=0;
virtual void func2()=0;
...
}
class B: public A {
public:
virtual void func1() {...}
}
所以如果有人创建了一个从 B 派生的类 C,他应该必须实现 func2:
class C: public B {
public:
virtual void func2() {...}
}
对于我的应用程序来说非常重要的是,C 类不会覆盖 func1,消除 B::func1()。
有没有办法禁止 B 的所有子类覆盖这个虚函数?如果不是在纯 C++ 中,当这个函数被覆盖时,boost MPL 中是否有一些东西会引发编译器错误?
【问题讨论】:
-
是否存在
A的子类应该覆盖func2的情况,如果没有,为什么它是虚拟的? -
不要认为那是可能的。因为当
new C'ing 一个新的 ponter 时,编译器会尝试将它设置为在最派生的类中运行。停在派生链的中间会破坏虚函数的意图。 -
我假设您的意思是覆盖,而不是覆盖?为什么不覆盖
B::func1对您很重要? -
您能否详细说明为什么它如此重要?我看到很多人要求这样做,但从未见过不能防止 maciavelli 案例的用例。
-
GCC 在 4.7 中添加了新的
final关键字。