重写 覆盖 final override
一、概念
目前理解这个概念只在类继承中出现;当在作用域嵌套中,应该也会出现重写的概念,比如内部命名空间重写了外部命名空间中的函数;
二、阻止类被继承(关键字final)
1、形式一
class NoDerived final { /* */ }; //NoDerived不能作为基类
2、形式二
class Last final : Base { /* */ }; //Last不能作为基类
三、阻止覆盖函数(关键字final;注意:这里并非虚函数)
struct D2 : B { //从B继承f2()和f3(),覆盖f1(int) void f1(int) const final; //不允许后续的其他类覆盖f1(int) }; struct D3 : D2 { void f2(); void f1(int) const; // 错误 };
三、强制覆盖子类虚函数(关键字override)
struct B { virtual void f1(int) const; virtual void f2(); void f3(); }; struct D1 : B { void f1(int) const override; void f2(int) override; //错误:B没有形如f2(int)的函数 void f3() override; //错误:f3不是虚函数 void f4() override; //错误:B没有名为f4的函数 };