国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

詳解C++成員函數的override和final說明符的用法

2020-05-23 14:09:35
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了詳解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{};
 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖宇县| 师宗县| 昂仁县| 兴国县| 长垣县| 大庆市| 三台县| 正镶白旗| 汨罗市| 秦安县| 武邑县| 滨海县| 金溪县| 安达市| 九龙县| 五寨县| 白沙| 博白县| 宣恩县| 宝清县| 罗城| 南通市| 江津市| 东乡| 黑山县| 武城县| 金川县| 吴忠市| 微博| 玉树县| 广水市| 鱼台县| 边坝县| 正安县| 永新县| 航空| 偏关县| 朝阳区| 红桥区| 陇南市| 南郑县|