Skip to content

Latest commit

 

History

History
24 lines (17 loc) · 918 Bytes

File metadata and controls

24 lines (17 loc) · 918 Bytes

80、 final 和 override

C++ 借由虚函数实现运⾏时多态,但 C++ 的虚函数⼜很多脆弱的地⽅:

⽆法禁止子类重写它。可能到某⼀层级时,我们不希望⼦类继续来重写当前虚函数了。

容易不小心隐藏⽗类的虚函数。⽐如在重写时,不小心声明了⼀个签名不⼀致但有同样名称的新函数。

C++11 提供了 final 来禁⽌虚函数被重/禁⽌类被继承, override 来显示地重写虚函 数。 这样编译器给我们不小心的⾏为提供更多有⽤的错误和警告。

struct Base1 final { }; 
struct Derived1 : Base1 {}; // 编译错:Base1不允许被继承
struct Base2 {
 virtual void f1() final;
 virtual void f2();
};
struct Derived2 : Base2 {
 virtual void f1(); // 编译错:f1不允许᯿写
 virtual void f2(int) override; // 编译错:⽗类中没有 void f2(int)
};