如何强制子类重写虚函数

cam*_*ino 5 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
};
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 7

将中间类中的虚函数也声明为纯虚函数。请记住,即使该函数被声明为纯虚函数,您也可以在中间类中提供该函数的实现。

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.
};
Run Code Online (Sandbox Code Playgroud)

如果您不需要实例化,则此策略有效B。如果您确实需要实例化B,则需要考虑不同的策略。您还必须重新考虑您的类层次结构。在良好的设计中,所有非叶类都应该是抽象的。

感谢@AustinMullins 提供工作代码的链接。

  • 这个答案假设 OP 不想实例化“B”。当然,如果您遵循非叶类应该是抽象的规则,那就没问题了。 (2认同)