override 說明符
可使用 override 關鍵字來指定在基類中重寫虛函數的成員函數。
語法
function-declaration override;
備注
override 僅在成員函數聲明之后使用時才是區分上下文的且具有特殊含義;否則,它不是保留的關鍵字。
使用 override 有助于防止您的代碼中出現意外的繼承行為。以下示例演示在未使用 override 的情況下,可能不打算使用派生類的成員函數行為。編譯器不會發出此代碼的任何錯誤。
class BaseClass{ virtual void funcA(); virtual void funcB() const; virtual void funcC(int = 0); void funcD();};class DerivedClass: public BaseClass{ virtual void funcA(); // ok, works as intended virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not // override BaseClass::funcB() const and it is a new member function virtual void funcC(double = 0.0); // DerivedClass::funcC(double) has a different // parameter type than BaseClass::funcC(int), so // DerivedClass::funcC(double) is a new member function};
當使用 override 時,編譯器會生成錯誤,而不會在不提示的情況下創建新的成員函數。
class BaseClass{ virtual void funcA(); virtual void funcB() const; virtual void funcC(int = 0); void funcD();};class DerivedClass: public BaseClass{ virtual void funcA() override; // ok virtual void funcB() override; // compiler error: DerivedClass::funcB() does not // override BaseClass::funcB() const virtual void funcC( double = 0.0 ) override; // compiler error: // DerivedClass::funcC(double) does not // override BaseClass::funcC(int) void funcD() override; // compiler error: DerivedClass::funcD() does not // override the non-virtual BaseClass::funcD()};
若要指定不能重寫函數且不能繼承類,請使用 final 關鍵字。
final 說明符
可以使用 final 關鍵字指定無法在派生類中重寫的虛函數。您還可以使用它指定無法繼承的類。
語法
function-declaration final;class class-name final base-classes
備注
final 只有在函數聲明或類名稱后使用時才是區分上下文的且具有特殊含義;否則,它不是保留的關鍵字。
在類聲明中使用 final 時,base-classes 是聲明的可選部分。
下面的示例使用 final 關鍵字指定無法重寫虛函數。
class BaseClass{ virtual void func() final;};class DerivedClass: public BaseClass{ virtual void func(); // compiler error: attempting to // override a final function};
有關如何指定可以重寫成員函數的信息,請參閱 override 說明符"。
下一個示例使用 final 關鍵字指定無法繼承類。
class BaseClass final {};class DerivedClass: public BaseClass // compiler error: BaseClass is // marked as non-inheritable{};