• <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>

            寶杉的博客

            UNIX/LINUX;ACE;SNMP;C++
            posts - 33, comments - 23, trackbacks - 0, articles - 0

            08-13復(fù)習(xí)

            Posted on 2007-08-30 10:28 寶杉 閱讀(207) 評論(0)  編輯 收藏 引用 所屬分類: C++

             

            析構(gòu)函數(shù)

            構(gòu)造函數(shù)初始化表:構(gòu)造函數(shù)特殊的初始化方式“初始化表達(dá)式表”(簡稱初始化表)。

            初始化表位于函數(shù)參數(shù)表之后,卻在函數(shù)體 {} 之前。這說明該表里的初始化工作發(fā)生在函數(shù)體內(nèi)的任何代碼被執(zhí)行之前。

            規(guī)則

            u       如果類存在繼承關(guān)系,派生類必須在其初始化表里調(diào)用基類的構(gòu)造函數(shù)。

            u       類的const常量只能在初始化表里被初始化,因為它不能在函數(shù)體內(nèi)用賦值的方式來初始化。

            u       類的數(shù)據(jù)成員的初始化可以采用初始化表或函數(shù)體內(nèi)賦值兩種方式,這兩種方式的效率不完全相同。

            效率

            1 內(nèi)部成員:

            初始化表和函數(shù)體內(nèi)賦值都可以,但效率不完全相同,但后者更為清晰直觀。

            例子:

            class F

            {

             public:

                F(int x, int y);        // 構(gòu)造函數(shù)

             private:

                int m_x, m_y;

                int m_i, m_j;

            }

            F::F(int x, int y)

             : m_x(x), m_y(y)          

            {

               m_i = 0;

               m_j = 0;

            }

            F::F(int x, int y)

            {

               m_x = x;

               m_y = y;

               m_i = 0;

               m_j = 0;

            }

            示例9-2(c) 數(shù)據(jù)成員在初始化表中被初始化     示例9-2(d) 數(shù)據(jù)成員在函數(shù)體內(nèi)被初始化

            兩種方式效率區(qū)別不大。

             

            2 非內(nèi)部成員:

            只能用初始化表,提高效率。

            例子:

                class A

            {…

                A(void);                // 無參數(shù)構(gòu)造函數(shù)

                A(const A &other);      // 拷貝構(gòu)造函數(shù)

                A & operate =( const A &other); // 賦值函數(shù)

            };

             

                class B

                {

                 public:

                    B(const A &a); // B的構(gòu)造函數(shù)

                 private: 

                    A m_a;         // 成員對象

            };

            比較與分析:

            B::B(const A &a)

             : m_a(a)          

            {

               …

            }

            B::B(const A &a)

            {

            m_a = a;

            }

            1 B類構(gòu)造函數(shù)的初始化里,調(diào)用了A類的拷貝構(gòu)造函數(shù)。

            2 B類構(gòu)造初始化里,隱藏了以下幾個步驟:

            先創(chuàng)建了a對象,調(diào)用了A類的無參數(shù)構(gòu)造函數(shù);

            把a賦值給m_a,調(diào)用了A類的賦值函數(shù);

             

            深入探討:

            構(gòu)造和析構(gòu)的次序?

            構(gòu)造從最深處的基類開始的,先一層層調(diào)用基類的構(gòu)造函數(shù),然后調(diào)用成員對象的構(gòu)造函數(shù)。

            而析構(gòu)函數(shù)嚴(yán)格按照構(gòu)造函數(shù)相反的次序執(zhí)行,該次序唯一,以便讓編譯器自動執(zhí)行析構(gòu)函數(shù)。

            特別之處是,成員對象初始化次序不受構(gòu)造函數(shù)初始化表次序影響,由在類中聲明的次序決定。而類聲明是唯一的,構(gòu)造函數(shù)卻可能有多個,所以有多個不同次序函數(shù)初始化表。如果按照構(gòu)造函數(shù)的次序構(gòu)造,那么解析函數(shù)不能得到唯一的逆序。

            国产精品免费福利久久| 国产免费久久久久久无码| 久久无码高潮喷水| 色综合久久久久久久久五月| 久久se精品一区精品二区| 亚洲午夜精品久久久久久浪潮| 囯产精品久久久久久久久蜜桃 | 久久久久久a亚洲欧洲aⅴ | 夜夜亚洲天天久久| 国内精品伊人久久久久777| 色综合色天天久久婷婷基地| 亚洲精品蜜桃久久久久久| 色99久久久久高潮综合影院| 精品国产一区二区三区久久久狼| 久久久久亚洲AV成人网人人软件| 久久亚洲春色中文字幕久久久| 伊色综合久久之综合久久| 色综合久久久久| 亚洲国产精品久久久久婷婷软件 | 久久婷婷久久一区二区三区| 亚洲AV无码一区东京热久久 | 无码精品久久久久久人妻中字 | 无码乱码观看精品久久| 久久免费国产精品一区二区| 国产精品久久久久国产A级| 国产成人精品三上悠亚久久| 亚洲精品第一综合99久久| 色综合久久中文字幕综合网| 狠狠色综合久久久久尤物| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 欧美一级久久久久久久大| jizzjizz国产精品久久| 国内精品久久久久伊人av| 久久久精品人妻一区二区三区蜜桃| 一本色道久久88加勒比—综合| 精品久久久久久| 国产精品免费久久久久影院| 国产一区二区三精品久久久无广告 | 欧美性大战久久久久久| 精品久久久久久无码人妻蜜桃| 久久综合久久综合九色|