1. override 重載程序員
當你在父類中使用了虛函數時候,你可能須要在某個子類中對這個虛函數進行重寫,如下方法均可以:ide
class A { virtual void foo(); } class B :public A { void foo(); //OK virtual foo(); // OK void foo() override; //OK }
若是不使用override,當你手一抖,將foo()寫成了f00()會怎麼樣呢?結果是編譯器並不會報錯,由於它並不知道你的目的是重寫虛函數,而是把它當成了新的函數。若是這個虛函數很重要的話,那就會對整個程序不利。函數
因此,override的做用就出來了,它指定了子類的這個虛函數是重寫的父類的,若是你名字不當心打錯了的話,編譯器是不會編譯經過的:spa
class A { virtual void foo(); }; class B :A { virtual void f00(); //OK virtual void f0o()override; //Error };
爲了減小程序的運行時錯誤,仍是養成重寫虛函數加上override的習慣吧。code
2.finalblog
當不但願某個類被繼承,或不但願某個虛函數被重寫,能夠在類名和虛函數後添加final關鍵字,添加final關鍵字後被繼承或重寫,編譯器會報錯。例子以下:繼承
class Base { virtual void foo(); }; class A : Base { void foo() final; // foo 被override而且是最後一個override,在其子類中不能夠重寫 void bar() final; // Error: 父類中沒有 bar虛函數能夠被重寫或final }; class B final : A // 指明B是不能夠被繼承的 { void foo() override; // Error: 在A中已經被final了 }; class C : B // Error: B is final { };
3. default 和delete開發
=default、=delete 是C++11的新特性,分別爲:顯式缺省(告知編譯器生成函數默認的缺省版本)和顯式刪除(告知編譯器不生成函數默認的缺省版本)。C++11中引進這兩種新特性的目的是爲了加強對「類默認函數的控制」,從而讓程序員更加精準地去控制默認版本的函數編譯器
C++開發中,咱們常常須要控制某些函數的生成。在C++11以前,咱們常常的廣泛作法是將其聲明爲類的 private 成員函數,這樣若在類外這些這些函數的操做時候,編譯器便會報錯,從而達到效果。編譯
注:若缺省版本被刪除了,重載該函數是非法的