重新定义和覆盖函数之间的区别
Difference between redefining and overriding a function
假设我有 class A
和虚函数 F()
:
class A
{
virtual void F()
{
// Do something
};
};
我还有另一个 class B
继承了 A
并且 重新定义了 F()
:
class B : A
{
void F()
{
// Do something
};
};
还有一个不同的 class C
也继承了 A
但 覆盖了 F()
:
class C : A
{
void F() override
{
// Do something
};
};
classes B
和 C
中的 F()
有什么区别?
两者都是覆盖。
当您使用关键字 override
时,如果碰巧 而不是 则确保编译失败。
这是很好的做法。
B::f()
和 C::f()
都是覆盖,它们完全 相同。
override
本质上是一个编译时咨询术语,会导致编译错误 if 函数确实 not override基地中的一个 class.
这有助于程序稳定性:如果 A::f()
的名称和参数类型发生更改,则会导致编译错误。
假设我有 class A
和虚函数 F()
:
class A
{
virtual void F()
{
// Do something
};
};
我还有另一个 class B
继承了 A
并且 重新定义了 F()
:
class B : A
{
void F()
{
// Do something
};
};
还有一个不同的 class C
也继承了 A
但 覆盖了 F()
:
class C : A
{
void F() override
{
// Do something
};
};
classes B
和 C
中的 F()
有什么区别?
两者都是覆盖。
当您使用关键字 override
时,如果碰巧 而不是 则确保编译失败。
这是很好的做法。
B::f()
和 C::f()
都是覆盖,它们完全 相同。
override
本质上是一个编译时咨询术语,会导致编译错误 if 函数确实 not override基地中的一个 class.
这有助于程序稳定性:如果 A::f()
的名称和参数类型发生更改,则会导致编译错误。