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

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

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

2020-01-26 14:44:58
字體:
來源:轉載
供稿:網友

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{};

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安康市| 石嘴山市| 秀山| 三江| 开化县| 定远县| 河北省| 富民县| 冷水江市| 剑阁县| 西吉县| 昌吉市| 门源| 灵宝市| 高邮市| 浦江县| 长阳| 乐至县| 咸丰县| 隆安县| 屯留县| 洪江市| 吐鲁番市| 西城区| 河间市| 利辛县| 宁陵县| 福贡县| 安宁市| 洛阳市| 小金县| 岳西县| 鄂托克前旗| 崇义县| 石嘴山市| 黑龙江省| 琼结县| 广州市| 阳春市| 纳雍县| 湛江市|