詳解C++成員函數(shù)的override和final說明符的用法
override 說明符
可使用 override 關(guān)鍵字來指定在基類中重寫虛函數(shù)的成員函數(shù)。
語法
function-declaration override;
備注
override 僅在成員函數(shù)聲明之后使用時(shí)才是區(qū)分上下文的且具有特殊含義;否則,它不是保留的關(guān)鍵字。
使用 override 有助于防止您的代碼中出現(xiàn)意外的繼承行為。以下示例演示在未使用 override 的情況下,可能不打算使用派生類的成員函數(shù)行為。編譯器不會發(fā)出此代碼的任何錯(cuò)誤。
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 };
當(dāng)使用 override 時(shí),編譯器會生成錯(cuò)誤,而不會在不提示的情況下創(chuàng)建新的成員函數(shù)。
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() };
若要指定不能重寫函數(shù)且不能繼承類,請使用 final 關(guān)鍵字。
final 說明符
可以使用 final 關(guān)鍵字指定無法在派生類中重寫的虛函數(shù)。您還可以使用它指定無法繼承的類。
語法
function-declaration final; class class-name final base-classes
備注
final 只有在函數(shù)聲明或類名稱后使用時(shí)才是區(qū)分上下文的且具有特殊含義;否則,它不是保留的關(guān)鍵字。
在類聲明中使用 final 時(shí),base-classes 是聲明的可選部分。
下面的示例使用 final 關(guān)鍵字指定無法重寫虛函數(shù)。
class BaseClass { virtual void func() final; }; class DerivedClass: public BaseClass { virtual void func(); // compiler error: attempting to // override a final function };
有關(guān)如何指定可以重寫成員函數(shù)的信息,請參閱 override 說明符"。
下一個(gè)示例使用 final 關(guān)鍵字指定無法繼承類。
class BaseClass final { }; class DerivedClass: public BaseClass // compiler error: BaseClass is // marked as non-inheritable { };
相關(guān)文章
C++實(shí)現(xiàn)一個(gè)簡易版的事件(Event)的示例代碼
之前在?windows系統(tǒng)中開發(fā)應(yīng)用時(shí),?遇到需要進(jìn)行線程同步的時(shí)候幾乎都是使用的事件內(nèi)核對象?Event。本文為大家整理了C++實(shí)現(xiàn)一個(gè)簡易版的事件(Event)的相關(guān)資料,需要的可以參考一下2022-11-11C語言驅(qū)動開發(fā)之內(nèi)核解鎖與強(qiáng)刪文件
在某些時(shí)候我們的系統(tǒng)中會出現(xiàn)一些無法被正常刪除的文件,如果想要強(qiáng)制刪除則需要在驅(qū)動層面對其進(jìn)行解鎖后才可刪掉,本文為大家介紹了內(nèi)核解鎖與強(qiáng)刪文件的方法,希望對大家有所幫助2023-06-06C語言數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列的實(shí)現(xiàn)及應(yīng)用
棧和隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu),只規(guī)定了性質(zhì),并沒有規(guī)定實(shí)現(xiàn)方式。本文將以順序結(jié)構(gòu)實(shí)現(xiàn)棧,鏈表方式實(shí)現(xiàn)隊(duì)列,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-08-08C++中的static和const的關(guān)鍵字用法詳解
這篇文章主要介紹了C++中的static和const的關(guān)鍵字用法詳解,這是一道經(jīng)常在面試中被問到的知識,本文給大家詳細(xì)介紹下,需要的朋友可以參考下2023-06-06