C++11 學習筆記-03.final and override

final 說明符 (C++11 起)
指定某個虛函數不能在子類中被覆蓋,或者某個類不能被子類繼承。

struct Base
{
    virtual void foo();
};
 
struct A : Base
{
    void foo() final; // Base::foo 被覆蓋而 A::foo 是最終覆蓋函數
    void bar() final; // 錯誤: bar 不能爲 final 因爲它非虛
};
 
struct B final : A // struct B 爲 final
{
    void foo() override; // 錯誤:foo 不能被覆蓋,因爲它在 A 中是 final
};
 
struct C : B // 錯誤:B 爲 final
{
};

override 說明符

解釋
在成員函數聲明或定義中,override 確保該函數爲虛函數並覆蓋某個基類中的虛函數。若此非真則程序非良構(生成編譯錯誤)。

override 是在成員函數聲明符之後使用時擁有特殊含義的標識符:其他情況下它不是保留的關鍵詞。

struct A
{
    virtual void foo();
    void bar();
};
 
struct B : A
{
    void foo() const override; // 錯誤:B::foo 不覆蓋 A::foo
                               // (簽名不匹配)
    void foo() override; // OK:B::foo 覆蓋 A::foo
    void bar() override; // 錯誤:A::bar 非虛
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章