override关键字
class B
{
virtual void f1(int) const {};
virtual void f2() {};
void f3() {};
};
class D :B //默认私有继承
{
void f1(int) const override {};//正确:f1与基类中的f1匹配
void f2(int) override {};//错误:B没有形如f2(int)的函数
void f3()override;//错误:f3不是虚函数
void f4()override;//错误:B没有名为f4的函数
};
final关键字
class B
{
public:
virtual void f1(int) const {};
virtual void f2() {};
void f3() {};
};
class D1:B //默认私有继承
{
public:
//从B继承f2()和f3(),覆盖f1(int)
void f1(int) const final {};//不让后续其他类覆盖f1(int)
};
class D2 :D1
{
public:
void f2() {};//正确:覆盖从间接基类B继承而来的f2
void f1(int) const {};//错误:D1已经将f2声明成final
};
class D3 :B
{
public:
void f1(int) {};//正确:因为只有继承至B的子类才不能覆盖f1函数
};