假设我的班级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
有何区别?
答案 0 :(得分:29)
两者都是重写。
当您使用关键字override
时,如果不成为覆盖,则确保编译失败。
这是一个很好的做法。
答案 1 :(得分:24)
B::f()
和C::f()
都是覆盖,而且完全相同。
override
本质上是一个编译时建议术语,如果该函数 覆盖基类中的一个,将导致编译错误。
这可以帮助提高程序的稳定性:如果更改A::f()
的名称和参数类型,则会产生编译错误。