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 非虛
};