• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 15,comments - 21,trackbacks - 0
            很久沒有碰C++,下個項目要開始使用C++,所以很多東西需要撿起來重新看看。從今天起記錄一些筆記,方便自己今后查閱。言歸正傳,先從構造函數的初始化列表說起。我把這個知識點細化成3個問題,1.為什么要有初始化列表,它和構造函數中初始化有什么不一樣。2.初始化的順序。3.一些注意的細節。
                  先說第一個問題。我們有兩個東西,是必須在初始化列表里完成的,一個是const修飾的變量,一個是引用。這點我就不細說了,查閱資料的都可以找到。下面我具體說說類成員。
            class Test1
            {
            public:
            Test1()
            {
            cout << "Test1 default constructor" << endl;
            }
            Test1(int i)
            {
            cout << "Test1 value constructor" << endl;
            }
            Test1(const Test1 &obj)
            {
            cout << "Test1 copy constructor" << endl;
            }
            Test1& operator = (const Test1 &obj)
            {
            cout << "Test1 = constructor" << endl;
            return *this;
            }
            ~Test1()
            {
            cout << "Test1 destructor" << endl;
            }
            };
             我定義一個類,然后再定義一個類,其中包含Test1
            class Test2
            {
            public:
                Test2()
                {
                    t1 = Test1(1);
                }

            private:
                Test1 t1;
            }; 
            我們在構造函數中初始化Test1,我們看看運行結果
            Test1 default constructor
            Test1 value constructor
            Test1 = constructor
            Test1 destructor
            Test1 destructor
            我們分析下這個輸出。Test1 default constructor,這說明在進入Test1構造函數之前,已經初始化了t1成員,并且調用的是無參構造函數。Test1 value constructor這個是Test1(1)創建出來的對象。Test1 = constructor,這個表示條用了拷貝構造函數,Test1 destructor這個表示Test1(1)這個臨時對象的析構,Test1 destructor這個表示是t1這個成員對象的析構。從上面的結果來看,構造函數中t1 = Test1(1);其實并不是真正意義是上的初始化,而是一次拷貝賦值。當進入構造函數內部之前,類成員會被默認構造函數初始化。如果說Test1是個很大的對象,這塊會造成性能上的開銷。所以,這點也是使用初始化列表的原因之一。
                  第二我們再來說下順序問題。簡單的原則是初始化列表里的會先于構造函數中,初始化列表里會按照變量聲明的順序。我們具體看看下面的例子。
            class Test3()
            {
            public:
                Test3(
            int x,int y,int z):_z(z),_y(y)
                {
                    _x 
            = x;
                }

            private:
                
            int _x,_y,_z;
            };
            按照上面的說法,賦值的順序是_y,_z,_x。
                  第三個是注意問題,每個成員只能在初始化列表里出現一次。
            class Test3
            {
            public:
                Test3(
            int x,int y,int z):_z(z),_y(y),_z(x)
                {
                    _x 
            = x;
                }

            private:
                
            int _x,_y,_z;
            };
            比如這種就是問題的。_z被初始化了2次。
            posted on 2012-08-14 10:24 梨樹陽光 閱讀(1464) 評論(3)  編輯 收藏 引用 所屬分類: C++

            FeedBack:
            # re: C++復習筆記---初始化列表
            2012-08-14 15:34 | xmli
            太亂了!
            class Test3()
            {
            public:
            Test3(int x,int y,int z):_z(z),_y(y)
            {
            _x = x;
            }

            private:
            int _x,_y,_z;
            };

            不管怎樣,初始化的順序都是定義的順序,所以,一定時_x,_y,_z,不管你是用初始化列表還是在構造函數內部,不管你的順序是什么。
            好好看看Efective C++吧。  回復  更多評論
              
            # re: C++復習筆記---初始化列表
            2012-08-14 17:11 | 恩戴米恩
            @xmli
            你覺得你說的對嗎?  回復  更多評論
              
            # re: C++復習筆記---初始化列表
            2012-08-14 17:21 | 梨樹陽光
            @xmli
            這里我只是想說初始化的順序和定義的順序有關系,跟寫的順序沒有關系  回復  更多評論
              
            99久久国产热无码精品免费久久久久 | 中文字幕久久欲求不满| 久久精品国产2020| 久久综合给合久久狠狠狠97色| 亚洲国产精品无码久久| 久久国产亚洲高清观看| 国产日韩久久免费影院| 久久久久亚洲AV无码观看| 久久天天婷婷五月俺也去| 久久精品成人国产午夜| 久久综合亚洲色HEZYO社区| 精品免费tv久久久久久久| 国产情侣久久久久aⅴ免费| 麻豆久久久9性大片| 99蜜桃臀久久久欧美精品网站 | 久久久久亚洲精品天堂| 久久久久久夜精品精品免费啦| 色婷婷久久综合中文久久蜜桃av| 久久久国产精品亚洲一区| 久久精品国产精品国产精品污| 国产ww久久久久久久久久| 久久国产高清一区二区三区| 久久99国产精品尤物| 亚洲综合久久综合激情久久| 久久精品女人天堂AV麻| 色成年激情久久综合| 久久精品无码专区免费东京热| 精品综合久久久久久97超人| 久久精品国产一区二区电影| 污污内射久久一区二区欧美日韩| 国产一区二区精品久久凹凸| 怡红院日本一道日本久久| 久久综合亚洲色HEZYO社区| 国产精品18久久久久久vr| 久久亚洲中文字幕精品有坂深雪| 精品久久久久久| 久久人妻少妇嫩草AV蜜桃| 久久久久久久综合日本亚洲| 狠狠综合久久AV一区二区三区| 99热热久久这里只有精品68| 亚洲国产精品无码成人片久久 |