国产探花免费观看_亚洲丰满少妇自慰呻吟_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{};
 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 信丰县| 荣昌县| 永川市| 赣榆县| 泊头市| 阜新| 云南省| 珠海市| 从化市| 武汉市| 抚松县| 隆安县| 监利县| 罗甸县| 吐鲁番市| 富阳市| 宁河县| 拉孜县| 涡阳县| 开平市| 海宁市| 淄博市| 怀远县| 莲花县| 东乡| 托克托县| 江阴市| 呼伦贝尔市| 金塔县| 永福县| 潜山县| 北京市| 大安市| 景德镇市| 沙湾县| 建阳市| 朔州市| 彰化市| 黔江区| 治多县| 乳山市|