色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++11新的類功能(特殊成員函數、override和final)

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 16:02 ? 次閱讀

1. 特殊的成員函數

C++11在原有的4個特殊成員函數(默認構造函數、復制構造函數、復制賦值運算符和析構函數)的基礎上新增了移動構造函數和移動賦值運算符。這些特殊成員函數在各種情況下是會通過編譯器自動提供的。

  • 默認構造函數 :如果未定義任何構造函數,編譯器將提供一個默認構造函數,對于類成員則調用其默認構造函數(對于內置的成員,默認構造函數不對其進行初始化。如果使用者提供了移動構造函數,編譯器將不會自動提供默認構造函數)。
  • 復制構造函數 :如果未定義復制構造函數,而代碼有需要使用它,編譯器將提供一個默認的復制構造函數。(如果使用者提供了類的移動構造函數的情況下,編譯器將不會自動提供復制構造函數)
  • 移動構造函數 :如果未定義移動構造函數,而代碼有需要使用它,編譯器將提供一個默認的移動構造函數。(如果使用者提供了類的析構函數、復制構造函數、復制賦值運算符或移動賦值運算符的情況下,編譯器將不會自動提供移動構造函數)
  • 復制賦值運算符 :如果未定義復制賦值運算符,而代碼有需要使用它,編譯器將提供一個默認的復制賦值運算符。(如果使用者提供了移動賦值運算符,編譯器不會自動提供復制賦值運算符)
  • 移動賦值運算符 :如果未定義移動賦值運算符,而代碼有需要使用它,編譯器將提供一個默認的移動賦值運算符。(如果使用者提供了復制構造函數、移動構造函數、復制賦值運算符或析構函數,編譯器不會自動提供移動賦值運算符)

當用戶在定義某些特殊函數后,導致另外某個特殊函數不會自動創建,這時候用戶仍可以使用關鍵詞 default 強制編譯器生成隱式聲明的目標特殊成員函數函數。例如用戶定義了移動構造函數,編譯器不會自動構建默認構造函數、復制構造函數和復制賦值運算符,這種情況下我們可以通過default強制編譯器創建這些方法的默認版本:

class A{
    public:
    A(A &&);
    A() = default;
    A(const A&) = default;
    A & operator = (const A&) = default;
};

同時,有些時候,我們不希望編譯器為我們提供某個特殊的成員函數默認版本,我們可以使用關鍵字delete來禁止編譯器使用特定方法。 關鍵字default只能用于這個6個特殊的成員數(默認構造函數、復制構造函數、復制賦值運算符、移動構造函數、移動賦值運算符和析構函數),但delete可以用于任何成員函數 。例如:

class A{
    public:
    A() = delete;//禁止編譯器生成默認構造函數
    void readDoubleNum(double);
}

class B{
    public:
    B() = delete;//禁止編譯器生成默認構造函數
    void readDoubleNum(double);
    void readDoubleNum(int) = delete;//禁用readDoubleNum函數的特定轉換
};

A a;
a.readDoubleNum(5.0);//正確
a.readDoubleNum(5);//正確,int值5將被轉換為5.0,進而執行readDoubleNum(double)方法

B b;
b.readDoubleNum(5.0);
b.readDoubleNum(5);//錯誤,其與readDoubleNum(int)原型匹配,編譯器檢測到該方法被禁用后,在編譯階段就會報錯,防止int到double的特定轉換

2. override和final

  • override標識符
    override說明符的作用是用來指定一個虛函數覆蓋另外一個虛函數。其用法如下:

    class A{
        virtual void fun();
        ...
    };
    
    class B : A{
        void fun() override;//B::fun將覆蓋A::fun
        ...
    };
    

    C++11引入override標識符的目的就是為了在重寫基類的方法時候,防止重寫方法的類型、名稱和參數列表因為人為因素造成其與基類的不一致,無法使用多態。使用override標識符將重寫的檢查工作(重寫方法的類型、名稱和參數列表要與基類的保持一致)交給編譯器處理,減少人為出錯的可能。

  • final標識符

final標識符的作用是指定某個虛函數不能在派生類中被覆蓋,或者某個類不能被派生。其使用方法如下:

calss A{
    virtual void fun();
};

class B : A{
    void fun() final;//A::fun被覆蓋,而且B::fun是最終被覆蓋函數
    void ba() final;//錯誤,ba非虛函數,因此它不能是final
};

class C final: B{//C為final
    void fun() override;//錯誤,fun不能被覆蓋,因為其在B中為final
};

class D : C{};//錯誤,因為類C位final,其不可以被派生
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49224
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7017
  • 運算符
    +關注

    關注

    0

    文章

    172

    瀏覽量

    11095
收藏 人收藏

    評論

    相關推薦

    使用C++11新特性實現一個通用的線程池設計

    C++11標準之前,多線程編程只能使用pthread_xxx開頭的一組POSIX標準的接口。從C++11標準開始,多線程相關接口封裝在了C++的std命名空間里。
    的頭像 發表于 12-22 13:58 ?1429次閱讀
    使用<b class='flag-5'>C++11</b>新特性實現一個通用的線程池設計

    vc的常用成員函數

    CRect:用來表示矩形的,擁有四個成員變量:top left bottom right。分別表是左上角和右下角的坐標。可以通過以下的方法構造:
    發表于 08-02 06:33

    成員函數中const的使用,有什么注意事項?

    成員函數中const的使用,有什么注意事項?
    發表于 04-26 06:42

    如何在rt-thread的env環境中配置C++11

    1、rt-thread的env環境是否支持C++112、如何在rt-thread的env環境中配置C++11
    發表于 05-06 09:52

    成員函數與普通函數的區別研究

    本文的目的是研究成員函數與普通函數之區別,以及不同調用方式之間的區別,進而通過內聯匯編語句模仿特定的調用,從而完成通過普通函數指針調用
    發表于 09-15 14:52 ?32次下載

    final關鍵字的用法

    在Java中,final關鍵字可以用來修飾、方法和變量(包括成員變量和局部變量)。下面就從這三個方面來了解一下final關鍵字的基本用法。 1.修飾
    發表于 09-27 10:36 ?0次下載
    <b class='flag-5'>final</b>關鍵字的用法

    《深入理解C++11C++11新特性解析與應用的詳細電子教材免費下載

    國內首本全面深入解讀 C++11 新標準的專著,由 C++ 標準委員會代表和 IBM XL 編譯器中國開發團隊共同撰寫。不僅詳細闡述了 C++11 標準的設計原則,而且系統地講解了 C++11
    發表于 08-27 08:00 ?0次下載

    C++:詳談構造函數

    構造函數是一個特殊成員函數,名字與名相同,創建類型對象的時候,由編譯器自動調用,在對象的生
    的頭像 發表于 06-29 11:44 ?1731次閱讀
    <b class='flag-5'>C</b>++:詳談構造<b class='flag-5'>函數</b>

    EE-128:C++中的DSP:從C++調用匯編成員函數

    EE-128:C++中的DSP:從C++調用匯編成員函數
    發表于 04-16 17:04 ?2次下載
    EE-128:<b class='flag-5'>C</b>++中的DSP:從<b class='flag-5'>C</b>++調用匯編<b class='flag-5'>類</b><b class='flag-5'>成員</b><b class='flag-5'>函數</b>

    的申明和成員函數定義分離是什么

    前面我們學習了如何定義,以及如何使用成員,在前面我們把成員函數都定義在了的內部,接下來我
    的頭像 發表于 02-27 15:33 ?972次閱讀

    淺談C++的mutable關鍵字

    C++11中推出了一種特殊的關鍵字:mutable用于修飾變量。它的作用是標注該變量一定會被修改,因此也就不是const類型。目的是為了使這些成員變量在被const關鍵字修飾的
    的頭像 發表于 04-15 11:13 ?3829次閱讀

    函數結構的定義和例程說明

    在理解拷貝構造函數前,還是有必要回顧下的構造函數基本概念。的構造函數是一種特殊
    的頭像 發表于 04-19 11:35 ?1077次閱讀

    8533-11 Final 數據表

    8533-11 Final 數據表
    發表于 07-11 19:58 ?0次下載
    8533-<b class='flag-5'>11</b> <b class='flag-5'>Final</b> 數據表

    重點了解一下C++11 包裝器function

    C++提供了多個包裝器,它們主要是為了給其他編程接口提供更一致或更合適的接口。C++11提供了多個包裝器,這里我們重點了解一下包裝器function。
    的頭像 發表于 07-18 16:41 ?552次閱讀

    EE-128:C語言中的DSP:從C調用匯編成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:從C調用匯編成員函數.pdf》資料免費下載
    發表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b>語言中的DSP:從<b class='flag-5'>C</b>調用匯編<b class='flag-5'>類</b><b class='flag-5'>成員</b><b class='flag-5'>函數</b>
    主站蜘蛛池模板: 性欧美video另类hd高清| 又黄又爽又无遮挡在线观看免费| 中国老太60old mantv| 精品国产5g影院天天爽| 亚洲黄色免费观看| 和尚轮流澡到高潮H| 羞羞漫画在线播放| 奇虎成人网| 97人妻碰视频在线观看| 免费成年人在线观看视频| 97国产在线观看| 欧美性类s0x| 高清欧美videos sexo| 香蕉在线播放| 激情办公室| 2021国产在线视频| 欧美黄色xxx| 国产成人免费a在线视频app| 久cao在线香蕉| 在线观看免费视频播放视频| 麻豆Av国产在线播放| 99在线在线视频观看| 色窝窝亚洲AV在线观看| 国产毛片女人18水多| 永久免费无码AV国产网站| 嫩草国产福利视频一区二区| 成年黄网站免费大全毛片| 忘忧草在线影院WWW日本二| 好紧的小嫩嫩17p| 2021国产精品一卡2卡三卡4卡| 人妻久久久精品99系列AV| 国产精品嫩草免费视频| 在线观看国产精选免费| 日本精品久久久久中文字幕2| 国产美女视频一区二区二三区| 伊人综合在线22| 奇米狠狠干| 精品国产成人AV在线看| CHINA篮球体育飞机2023| 性啪啪chinese东北女人| 名女躁b久久天天躁|