c++中構造函數和初始化列表

我不是筆記的創造者,我只是筆記的搬運工~

1 ,構造函數可以重載,也可以帶有缺省參數          
    匹配string的無參構造函數
    string s;
    匹配string的有參(const char*)構造函數      
    string s("hello");

2 ,缺省構造函數(無參構造函數)
   1)如果類中沒有定義任何構造函數,編譯器會爲該類提供一個缺省(無參)構造函數:
        --》對於基本類型成員變量不做初始化
        --》對於類 類型的成員變量(成員子對象),將會自動調用相應類的無參構造函數來初始化

   2)如果自己定義了構造函數,無論是否有參數,那麼編譯器都不會再提供缺省的無參構造函數了.

3 ,類型轉換構造函數(單參構造函數) //構造函數的類型轉換   
    class 類名{
        //可以將源類型變量轉換爲當前類類型對象.
        類名(源類型){...}
    };
    -----------------------------------
    class 類名{
        //加“explicit”關鍵字修飾,可以強制要求這種類型
        //轉換必須顯式的完成.
        explicit 類名(源類型){...}
    };

4, 拷貝構造函數(複製構造函數) 這部分我覺得還挺難理解的 
1)用一個已存在的對象作爲同類對象的構造實參,創建新的副本對象時,會調用該類拷貝構造函數。
    class 類名{
        類名(const 類名&){//拷貝構造
            ...
        }
    };
    ------------
    eg:
    class A{...};
    A a1(...);
    A a2(a1);//匹配A的拷貝構造函數


2)如果一個類沒有自己定義拷貝構造函數,那麼編譯器會爲該類提供一個缺省的拷貝構造函數:
--》對於基本類型的成員變量,按字節複製
--》對於類類型的成員變量(成員子對象),將自動調用相應類的拷貝構造函數來初始化

 

注:一般不需要自己定義拷貝構造函數函數,因爲編譯器缺省提供的已經很好用了.

    class A1{};//缺省無參,缺省拷貝
    class A2{//缺省拷貝
        A(void){}
    };
    class A3{//缺省拷貝
        A(int){}
    };
    class A4{//沒有缺省構造
        A(const A&){}
    };

3)拷貝構造函數調用時機
--》用一個已存在對象作爲同類對象的構造實參
--》以對象形式向函數傳遞參數
--》從函數中返回對象(有可能被編譯器優化掉)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章