【问题标题】:Difference between redefining and overriding a function重新定义和覆盖函数之间的区别
【发布时间】:2016-06-01 02:48:42
【问题描述】:

假设我有一个类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
    };
};

BBC 类中的 F() 有什么区别?

【问题讨论】:

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


    【解决方案1】:

    两者都是覆盖。

    当您使用关键字override 时,如果它应该发生而不是被覆盖,您可以确保编译失败。

    这是个好习惯。

    【讨论】:

    • 更不用说阅读 git 等存储库时的可读性因素
    • @Tgsmith61591:是的。我还想知道是否包含一个如何在不覆盖的情况下重载(本质上是“重新定义”)的示例。但我决定简明扼要。 :)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2022-12-11
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多