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

Kar*_*rus 26 c++ virtual overriding virtual-functions c++11

假设我有A一个带有虚函数的类F():

class A
{
    virtual void F()
    {
        // Do something
    };
};
Run Code Online (Sandbox Code Playgroud)

我有另一个B继承A重新定义的F():

class B : A
{
    void F()
    {
        // Do something
    };
};
Run Code Online (Sandbox Code Playgroud)

还有一个不同的类C,它也继承了A但是覆盖 F():

class C : A
{
    void F() override
    {
        // Do something
    };
};
Run Code Online (Sandbox Code Playgroud)

F()课程B和有C什么区别?

Che*_*Alf 29

两者都是重写.

当您使用关键字override可以确保编译失败,如果碰巧没有被覆盖.

这是一个很好的做法.

  • 更不用说在浏览像git这样的存储库时的可读性因素了 (3认同)

Bat*_*eba 24

双方B::f()C::f()都覆盖和他们正好相同.

override本质上是一个编译时建议术语,如果该函数没有覆盖基类中的一个,将导致编译错误.

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