有时我想强制子类覆盖一个函数,例如:
class A
{
virtual void foo() = 0;
};
class B : public A
{
virtual void foo() {...}
};
class C : public B
{
//people may forget to override function foo
};
答案 0 :(得分:3)
将中间类中的虚函数声明为纯虚函数。请记住,即使声明为纯虚函数,也可以在中间类中提供函数的实现。
class A
{
virtual void foo() = 0;
};
class B : public A
{
virtual void foo() = 0;
};
void B::foo()
{
}
class C : public B
{
// Now you must provide an implementation
// if you want to create an instance of C.
};
如果您不需要实例化B
,则此策略有效。如果确实需要实例化B
,则需要考虑不同的策略。您还必须重新考虑您的类层次结构。所有非叶类都应该是一个好的设计抽象。
感谢@AustinMullins提供working code的链接。