C++11引入了新的关键字override, 它的语义是强制子类严格重载父类的函数,使其参数类型,参数数量,常量性,均保证一致,否则则认为是语法错误。它会使得某些运行时不正确的行为,被编译器捕获,增强程序的健壮性。
我们举个例子:
比如说类A拥有foo函数,类B的本意是想重载foo的函数,但是实际在coding过程中把foo写成了foo1.
class A
{
public:
virtual void foo()
{
std::cout << "This is A" << std::endl;
}
};
class B : public A
{
public:
void foo1()
{
std::cout << "This is B" << std::endl;
}
};
int main()
{
A *a = new B();
a->foo(); // Oops, This is A
return 0;
}
有一种隐藏的比较深的错误是 const, 即常量性。
class B : public A
{
public:
void foo() const
{
std::cout << "This is B" << std::endl;
}
};
同样,也会造成错误的重载。
综上,coding中子类中尽可能使用override关键字,它可以让编译器帮你做检查!