C++ 重新定义和重写函数之间的区别

C++ 重新定义和重写函数之间的区别,c++,c++11,overriding,virtual,virtual-functions,C++,C++11,Overriding,Virtual,Virtual Functions,假设我有一个类A和一个虚拟函数F(): 我还有另一个类B,它继承了A,并重新定义了F(): 和另一个类C,它也继承a,但重写F(): 类B和C中的F()之间有什么区别?都是覆盖 当您使用关键字override时,如果它恰好不是一个override,则会确保编译失败 这是一个很好的实践。两个B::f()和C::f()都是重写,它们完全相同 override本质上是一个编译时建议术语,如果函数不重写基类中的一个,则会导致编译错误 这有助于程序的稳定性:如果更改了A::f()的名称和参数类型,则会导致

假设我有一个类
A
和一个虚拟函数
F()

我还有另一个类
B
,它继承了
A
,并重新定义了
F()

和另一个类
C
,它也继承
a
,但重写
F()

B
C
中的
F()
之间有什么区别?

都是覆盖

当您使用关键字
override
时,如果它恰好不是一个override,则会确保编译失败

这是一个很好的实践。

两个
B::f()
C::f()
都是重写,它们完全相同

override
本质上是一个编译时建议术语,如果函数不重写基类中的一个,则会导致编译错误


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

更不用说阅读存储库时的可读性因素了,如git@Tgsmith61591:是的。我还想知道是否要包括一个如何在不重写的情况下重载(本质上是“重新定义”)的示例。但我决定简明扼要。:)
class A
{
    virtual void F()
    {
        // Do something
    };
};
class B : A
{
    void F()
    {
        // Do something
    };
};
class C : A
{
    void F() override
    {
        // Do something
    };
};