有时我想强制子类重写一个函数,例如:
class A
{
virtual void foo() = 0;
};
class B : public A
{
virtual void foo() {...}
};
class C : public B
{
//people may forget to override function foo
};
最佳答案
将中间类中的虚函数也声明为纯虚函数。请记住,您可以在中间类中提供该函数的实现,即使它被声明为纯虚拟。
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 的链接.
关于c++ - 如何强制子类覆盖虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862627/