• <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++,下個(gè)項(xiàng)目要開始使用C++,所以很多東西需要撿起來(lái)重新看看。從今天起記錄一些筆記,方便自己今后查閱。言歸正傳,先從構(gòu)造函數(shù)的初始化列表說(shuō)起。我把這個(gè)知識(shí)點(diǎn)細(xì)化成3個(gè)問題,1.為什么要有初始化列表,它和構(gòu)造函數(shù)中初始化有什么不一樣。2.初始化的順序。3.一些注意的細(xì)節(jié)。
                  先說(shuō)第一個(gè)問題。我們有兩個(gè)東西,是必須在初始化列表里完成的,一個(gè)是const修飾的變量,一個(gè)是引用。這點(diǎn)我就不細(xì)說(shuō)了,查閱資料的都可以找到。下面我具體說(shuō)說(shuō)類成員。
            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;
            }
            };
             我定義一個(gè)類,然后再定義一個(gè)類,其中包含Test1
            class Test2
            {
            public:
                Test2()
                {
                    t1 = Test1(1);
                }

            private:
                Test1 t1;
            }; 
            我們?cè)跇?gòu)造函數(shù)中初始化Test1,我們看看運(yùn)行結(jié)果
            Test1 default constructor
            Test1 value constructor
            Test1 = constructor
            Test1 destructor
            Test1 destructor
            我們分析下這個(gè)輸出。Test1 default constructor,這說(shuō)明在進(jìn)入Test1構(gòu)造函數(shù)之前,已經(jīng)初始化了t1成員,并且調(diào)用的是無(wú)參構(gòu)造函數(shù)。Test1 value constructor這個(gè)是Test1(1)創(chuàng)建出來(lái)的對(duì)象。Test1 = constructor,這個(gè)表示條用了拷貝構(gòu)造函數(shù),Test1 destructor這個(gè)表示Test1(1)這個(gè)臨時(shí)對(duì)象的析構(gòu),Test1 destructor這個(gè)表示是t1這個(gè)成員對(duì)象的析構(gòu)。從上面的結(jié)果來(lái)看,構(gòu)造函數(shù)中t1 = Test1(1);其實(shí)并不是真正意義是上的初始化,而是一次拷貝賦值。當(dāng)進(jìn)入構(gòu)造函數(shù)內(nèi)部之前,類成員會(huì)被默認(rèn)構(gòu)造函數(shù)初始化。如果說(shuō)Test1是個(gè)很大的對(duì)象,這塊會(huì)造成性能上的開銷。所以,這點(diǎn)也是使用初始化列表的原因之一。
                  第二我們?cè)賮?lái)說(shuō)下順序問題。簡(jiǎn)單的原則是初始化列表里的會(huì)先于構(gòu)造函數(shù)中,初始化列表里會(huì)按照變量聲明的順序。我們具體看看下面的例子。
            class Test3()
            {
            public:
                Test3(
            int x,int y,int z):_z(z),_y(y)
                {
                    _x 
            = x;
                }

            private:
                
            int _x,_y,_z;
            };
            按照上面的說(shuō)法,賦值的順序是_y,_z,_x。
                  第三個(gè)是注意問題,每個(gè)成員只能在初始化列表里出現(xiàn)一次。
            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 梨樹陽(yáng)光 閱讀(1483) 評(píng)論(3)  編輯 收藏 引用 所屬分類: C++

            FeedBack:
            # re: C++復(fù)習(xí)筆記---初始化列表
            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;
            };

            不管怎樣,初始化的順序都是定義的順序,所以,一定時(shí)_x,_y,_z,不管你是用初始化列表還是在構(gòu)造函數(shù)內(nèi)部,不管你的順序是什么。
            好好看看Efective C++吧。  回復(fù)  更多評(píng)論
              
            # re: C++復(fù)習(xí)筆記---初始化列表
            2012-08-14 17:11 | 恩戴米恩
            @xmli
            你覺得你說(shuō)的對(duì)嗎?  回復(fù)  更多評(píng)論
              
            # re: C++復(fù)習(xí)筆記---初始化列表
            2012-08-14 17:21 | 梨樹陽(yáng)光
            @xmli
            這里我只是想說(shuō)初始化的順序和定義的順序有關(guān)系,跟寫的順序沒有關(guān)系  回復(fù)  更多評(píng)論
              
            久久精品人人做人人妻人人玩| 99久久精品国产高清一区二区| 久久精品www| 久久丫精品国产亚洲av| 久久SE精品一区二区| 色综合久久久久综合99| 久久成人18免费网站| 日韩亚洲欧美久久久www综合网| 久久婷婷五月综合色奶水99啪| 亚洲中文字幕无码久久2017| 久久WWW免费人成一看片| 久久这里只有精品18| 久久66热人妻偷产精品9| 久久国产免费观看精品| 激情五月综合综合久久69| 四虎影视久久久免费| 77777亚洲午夜久久多喷| 99久久精品影院老鸭窝| 国产2021久久精品| 亚洲国产成人精品女人久久久 | 性色欲网站人妻丰满中文久久不卡| 蜜桃麻豆WWW久久囤产精品| 人人狠狠综合久久88成人| 国产成年无码久久久久毛片| 国产精品日韩深夜福利久久| 综合久久一区二区三区| 国产精品国色综合久久| 99久久亚洲综合精品网站| 一本综合久久国产二区| 久久Av无码精品人妻系列| 久久精品国产福利国产琪琪| 亚洲精品午夜国产VA久久成人| 久久精品国产69国产精品亚洲| 香蕉aa三级久久毛片| 一级做a爱片久久毛片| 久久人妻无码中文字幕| 91精品日韩人妻无码久久不卡| 久久精品国产亚洲AV久| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久久99精品成人片三人毛片| 97久久婷婷五月综合色d啪蜜芽|