override final default delete修飾的成員函數

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 成員函數,這樣若在類外這些這些函數的操做時候,編譯器便會報錯,從而達到效果。編譯

注:若缺省版本被刪除了,重載該函數是非法的

相關文章
相關標籤/搜索