• <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>
            隨筆 - 96  文章 - 255  trackbacks - 0
            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            E-mail:zbln426@163.com QQ:85132383 長期尋找對戰(zhàn)略游戲感興趣的合作伙伴。

            常用鏈接

            留言簿(21)

            隨筆分類

            隨筆檔案

            SDL相關(guān)網(wǎng)站

            我的個(gè)人網(wǎng)頁

            我的小游戲

            資源下載

            搜索

            •  

            積分與排名

            • 積分 - 493480
            • 排名 - 39

            最新評論

            閱讀排行榜

            評論排行榜

                    假設(shè)我們有一個(gè)類A,另外一個(gè)類B中有個(gè)成員數(shù)據(jù)是A的對象,我們?nèi)绾蝸矶x這個(gè)成員數(shù)據(jù)呢?
            最直接的,我們可以就把它定義為A的對象:A a_obj;
            其次,我們可以把它定義為A對象的引用:A& a_obj; 或者const引用:const A& a_obj;
            再者,我們還可以把它定義為A對象的指針:A* pA_obj; 或者const對象的指針:const A* pA_obj;
                    當(dāng)我們直接使用A對象的時(shí)候,a_obj會在B對象建立的時(shí)候建立,在B銷毀的時(shí)候銷毀。因?yàn)檫@是一個(gè)新建立的對象,所以在成員初始化的時(shí)候是真正構(gòu)造了對象,即我們前面說到的使用了復(fù)制構(gòu)造函數(shù)。
                    如果使用的是A對象的引用或者指針,a_obj(或pA_obj)都沒有構(gòu)造新的對象。我們假設(shè)B的一個(gè)構(gòu)造函數(shù)是這樣的:B(const A& a_obj): a_obj(a_obj) {},那么毫無疑問,這個(gè)構(gòu)造函數(shù)是能正常工作的,也就是說,我們用現(xiàn)成的對象,或者說是在B對象生命周期內(nèi)都會一直存在的A對象去構(gòu)造B對象是沒有問題的。但是,如果一個(gè)構(gòu)造函數(shù)是這樣的:B(int a): a_obj(A(a)) {},這個(gè)函數(shù),一般在編譯的時(shí)候是不會報(bào)錯(cuò)或者發(fā)出警告的,但是我們分析一下,A(a)是臨時(shí)構(gòu)造了一個(gè)A對象,然后a_obj成為了這個(gè)臨時(shí)對象的引用。但是問題是,這個(gè)臨時(shí)對象在B對象構(gòu)造之后就馬上銷毀了,也就是說,a_obj引用了一個(gè)不存在的對象(換到指針說就是指向了空指針)。這是一個(gè)巨大的錯(cuò)誤,將在運(yùn)行時(shí)引發(fā)錯(cuò)誤。
                    所以,結(jié)論是:如果成員數(shù)據(jù)使用(新)對象,則必須定義這個(gè)對象所屬類的復(fù)制構(gòu)造函數(shù);如果使用的是對象引用或者指針,則一定只能用已經(jīng)存在并且會在B對象整個(gè)生命周期內(nèi)都存在的A對象來構(gòu)造這個(gè)B對象。
                    說得貌似很復(fù)雜,留個(gè)作為例子的3個(gè)類,大家可以多寫幾個(gè)演示程序試試。
            #ifndef A_HPP
            #define A_HPP

            #include 
            <iostream>
            using namespace std;

            char* get_point(int lenth);
            void free_point(char* temp);

            class A
            {
            private:
                
            //
            protected:
                
            char* temp;
                
            int lenth;
                A();
            public:
                A(
            const A& copy);
                
            ~A();
                
            void show() const;
            };

            class C: public A
            {
            public:
                C(
            int _lenth);
                
            ~C();
            };


            class B
            {
            private:
                A b;
            public:
                B(
            const A& a);
                B(
            int _lenth);
                
            ~B();
                
            void show() const;
            };

            #endif

            #include "a.hpp"

            A::A(): temp(
            0),lenth(0)
            {
                cout
            << "A Constructor!" << endl; 
            }


            A::A(
            const A& copy): lenth(copy.lenth)
            {
                temp 
            = get_point(lenth);
                cout 
            << "A Copy Constructor" << endl;
                cout 
            << "temp at: " << int(temp) << endl;
            }


            A::
            ~A()
            {
                cout 
            << "temp at: " << int(temp) << endl;
                free_point(temp);
                cout 
            << "Heap Deleted!\n";
                cout 
            << "A Destroyed!" << endl; 
            }

            void A::show() const
            {
                cout 
            << temp << endl;
            }


            //***************************************


            C::C(
            int _lenth): A()
            {
                lenth 
            = _lenth;
                temp 
            = get_point(lenth);
                cout
            << "C Constructor!" << endl; 
                cout 
            << "temp at: " << int(temp) << endl;
            }

            C::
            ~C()
            {
                cout 
            << "C Destroyed!" << endl; 
            }

            //***************************************

             
            B::B(
            const A& a): b(a)
            {
                cout
            << "B Constructor!" << endl; 
            }

            B::B(
            int _lenth): b(C(_lenth))
            {
                cout
            << "B Constructor!" << endl;
            }

            B::
            ~B()
            {
                cout 
            << "B Destroyed!" << endl; 
            }

            void B::show() const
            {
                b.show();
            }


            //************************************


            char* get_point(int lenth)
            {
                
            char* temp = new char[lenth+1];
                
            for ( int i = 0; i< lenth; i++ )
                    temp[i] 
            = '*';
                temp[lenth] 
            = '\0';
                cout 
            << "New buffer got!\n";
                
            return temp;
            }

            void free_point(char* temp)
            {
                delete []temp;
                cout 
            << "Buffer deleted!\n";
            }
            久久av无码专区亚洲av桃花岛| 亚洲午夜久久久影院| 青青草原综合久久| 国产99久久久国产精品~~牛| 亚洲AⅤ优女AV综合久久久| 欧美午夜精品久久久久免费视| 99久久99久久精品国产| 久久久久亚洲AV成人网人人网站| 潮喷大喷水系列无码久久精品| 久久久久亚洲精品男人的天堂| 久久精品国产亚洲AV不卡| 久久国产精品成人免费| 久久综合九色综合网站| 99re这里只有精品热久久| 三级三级久久三级久久| 国产精品狼人久久久久影院 | 色综合久久综合网观看| 久久久国产打桩机| 日韩久久无码免费毛片软件| 国产精品成人无码久久久久久 | 久久偷看各类wc女厕嘘嘘| 亚洲日本久久久午夜精品| 久久亚洲国产午夜精品理论片| 亚洲AV无一区二区三区久久| 久久久久亚洲AV成人网人人网站| 青青青青久久精品国产 | 精品国产青草久久久久福利 | 免费一级欧美大片久久网| 日本福利片国产午夜久久| 国产精品久久久久影院色| 少妇久久久久久被弄高潮| 亚洲成色www久久网站夜月| 国内精品九九久久精品| 久久久久人妻一区二区三区| 思思久久好好热精品国产| 伊人热热久久原色播放www| 思思久久好好热精品国产| 伊人久久综合精品无码AV专区| 亚洲成色WWW久久网站| 国产精品99久久免费观看| 99久久精品费精品国产一区二区|