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关键字,它可以让编译器帮你做检查!
本文深入探讨C++11中新增的override关键字的作用与重要性,通过实例展示如何避免子类重写父类函数时可能出现的错误,如函数名误写或const属性不一致等问题,提升代码健壮性。
1439

被折叠的 条评论
为什么被折叠?



