重新定义和覆盖函数之间的区别

Difference between redefining and overriding a function

假设我有 class A 和虚函数 F():

class A
{
    virtual void F()
    {
        // Do something
    };
};

我还有另一个 class B 继承了 A 并且 重新定义了 F():

class B : A
{
    void F()
    {
        // Do something
    };
};

还有一个不同的 class C 也继承了 A 覆盖了 F():

class C : A
{
    void F() override
    {
        // Do something
    };
};

classes BC 中的 F() 有什么区别?

两者都是覆盖。

当您使用关键字 override 时,如果碰巧 而不是 则确保编译失败。

这是很好的做法。

B::f()C::f() 都是覆盖,它们完全 相同。

override 本质上是一个编译时咨询术语,会导致编译错误 if 函数确实 not override基地中的一个 class.

这有助于程序稳定性:如果 A::f() 的名称和参数类型发生更改,则会导致编译错误。