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

时间:2016-02-19 13:45:38

标签: c++ c++11 override virtual virtual-functions

假设我的班级A带有虚函数F()

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

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

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

另一个班级C也会继承A会覆盖 F()

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

班级F()B中的C有何区别?

2 个答案:

答案 0 :(得分:29)

两者都是重写。

当您使用关键字override时,如果成为覆盖,则确保编译失败。

这是一个很好的做法。

答案 1 :(得分:24)

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

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

这可以帮助提高程序的稳定性:如果更改A::f()的名称和参数类型,则会产生编译错误。