如何强制子类覆盖虚函数

时间:2015-03-04 18:59:03

标签: c++

有时我想强制子类覆盖一个函数,例如:

class A
{
    virtual void foo() = 0;
};

class B : public A
{
    virtual void foo() {...}
};

class C : public B
{
    //people may forget to override function foo
};

1 个答案:

答案 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的链接。