詳解C++成員函數的override和final解釋符的用法。本站提示廣大學習愛好者:(詳解C++成員函數的override和final解釋符的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++成員函數的override和final解釋符的用法正文
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 { };