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

            ivy-jie

            progress ...

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              9 Posts :: 41 Stories :: 6 Comments :: 0 Trackbacks

            派生類(lèi)的對(duì)象都含有基類(lèi)對(duì)象作為其一部分,我們可以將指向派生類(lèi)型的引用轉(zhuǎn)換為指向它的基類(lèi)型的引用,像轉(zhuǎn)換指針一樣,我們可以用派生類(lèi)的對(duì)象初始化或賦值基類(lèi)對(duì)象,反之卻不行。class base{
            public:
            };

            class derived:public base{
            public:
            };

            int main(void) {
                derived obj_d;
                base obj_b=obj_d;//賦值運(yùn)算符
                base obj_b2(obj_d);//用派生類(lèi)對(duì)象初始化

                derived &ref_d=obj_d;
                base &ref_b=ref_d;
                base &ref_b2(ref_d);

                cout<<"end in main\n";
                return EXIT_SUCCESS;
            }
             
            程序編譯沒(méi)有錯(cuò)誤,只是會(huì)提示ref_b,ref_b2沒(méi)有使用,如果反過(guò)來(lái)轉(zhuǎn)換基類(lèi)對(duì)象或引用為派生類(lèi)型的則會(huì)報(bào)錯(cuò)。
            實(shí)際上,這里編譯器并沒(méi)有將派生類(lèi)對(duì)象或引用“轉(zhuǎn)換”為基類(lèi)型的,只是用派生類(lèi)對(duì)象中的基類(lèi)部分初始化或賦值基類(lèi)對(duì)象,引用方面,將派生類(lèi)基類(lèi)部分的地址傳遞給基類(lèi)型的引用。
            前面在虛函數(shù)實(shí)例時(shí),看到將派生類(lèi)對(duì)象傳遞給參數(shù)為基類(lèi)型引用的函數(shù),這時(shí)傳遞的是地址,實(shí)參的派生類(lèi)對(duì)象還是派生類(lèi)對(duì)象。
            如果是參數(shù)為基類(lèi)對(duì)象的函數(shù),情況有所不同,實(shí)參派生類(lèi)對(duì)象的基類(lèi)部分會(huì)被復(fù)制給一個(gè)函數(shù)體內(nèi)建立的臨時(shí)的基類(lèi)對(duì)象。

            當(dāng)我們用派生類(lèi)對(duì)象初使化或賦值基類(lèi)對(duì)象時(shí),有兩種可能:
            1.基類(lèi)中定義了相應(yīng)的構(gòu)造函數(shù)和重載了賦值運(yùn)算符,這時(shí)將會(huì)按照相應(yīng)的函數(shù)進(jìn)行
            class derived;
            class base{
            public:
                base(const derived&);
                base& operator=(derived &);
            };
             

            2.基類(lèi)中并沒(méi)有定義相關(guān)的函數(shù),與情況1相比,這種情況更為常見(jiàn)。
              通常基類(lèi)中會(huì)有考構(gòu),其參數(shù)為const 基類(lèi)型引用,考構(gòu)會(huì)幫我們完成派生類(lèi)對(duì)象初始化或賦值基類(lèi)型對(duì)象,其中發(fā)生指向派生類(lèi)的引用轉(zhuǎn)換為基類(lèi)型的引用。開(kāi)頭的示例程序:

                base obj_b=obj_d;//賦值運(yùn)算符
                base obj_b2(obj_d);//用派生類(lèi)對(duì)象初始化,調(diào)用的構(gòu)造函數(shù)
            派生類(lèi)中的基類(lèi)部分好像被“切割”(slice down)下一樣,賦值給基類(lèi)對(duì)象。

            派生類(lèi)-基類(lèi) 轉(zhuǎn)換后的成員訪問(wèn)問(wèn)題
              如果是公有派生,轉(zhuǎn)換后,可以訪問(wèn)基類(lèi)對(duì)象的相應(yīng)成員,如果是保護(hù)或私有派生則不可。
            class base{
            public:
                int pub;
            protected:
                int pro;
            };

            class derived:public base{
            public:
            };

            int main(void) {
                derived obj_d;
                base obj_b=obj_d;//賦值運(yùn)算符

                cout<<obj_b.pub<<" "<<endl;
                cout<<"end in main\n";
                return EXIT_SUCCESS;
            }

             
            程序沒(méi)有任何問(wèn)題,輸出結(jié)果為一隨機(jī)值,因?yàn)槲覀儧](méi)有定義任何構(gòu)造函數(shù)為數(shù)據(jù)成員初始化。
            如果將派生類(lèi)型變?yōu)楸Wo(hù)或私有
            class derived:protected base{
            public:
            };
             
            編譯報(bào)錯(cuò)  `base' is an inaccessible base of `derived'
            而且,私有派生時(shí),其后續(xù)派生的類(lèi)是不可轉(zhuǎn)換為基類(lèi)型的,保護(hù)派生可以。

            基類(lèi)-派生類(lèi) 的轉(zhuǎn)換
            無(wú)論是用基類(lèi)對(duì)象還是引用初始化派生類(lèi)對(duì)象或引用都是不可以的,基類(lèi)對(duì)象其所占的內(nèi)存空間中并沒(méi)有派生類(lèi)所定義的只屬于它自己的那一部分。即使是有一個(gè)基類(lèi)型的引用,其此時(shí)正好指向一個(gè)派生類(lèi)對(duì)象,我們也不可將其轉(zhuǎn)換為派生類(lèi)型的引用,因?yàn)榫幾g時(shí)編譯器檢查的是靜態(tài)類(lèi)型。

            posted on 2009-06-28 11:06 ivy-jie 閱讀(794) 評(píng)論(0)  編輯 收藏 引用
            国产精品一区二区久久精品无码 | 中文无码久久精品| 亚洲AV日韩AV天堂久久| .精品久久久麻豆国产精品| 日本久久久久久中文字幕| 男女久久久国产一区二区三区| 亚洲精品乱码久久久久久自慰| 麻豆精品久久精品色综合| 日韩精品无码久久一区二区三| 久久久久精品国产亚洲AV无码| 97超级碰碰碰碰久久久久| 亚洲欧美一区二区三区久久| 久久97精品久久久久久久不卡| 亚洲人成无码www久久久| 色综合久久88色综合天天| 久久精品国产精品亚洲精品| 国产综合成人久久大片91| 久久国产精品99精品国产| 久久精品国产亚洲AV不卡| 色99久久久久高潮综合影院 | 久久综合伊人77777麻豆| 久久精品中文字幕第23页| 国产巨作麻豆欧美亚洲综合久久| 久久婷婷五月综合色99啪ak| 久久偷看各类wc女厕嘘嘘| 欧美激情精品久久久久久久| 色综合久久天天综合| 久久综合亚洲欧美成人| 久久国产香蕉视频| 国产福利电影一区二区三区久久老子无码午夜伦不 | 无码超乳爆乳中文字幕久久 | 亚洲国产精久久久久久久| 欧洲精品久久久av无码电影| 一级做a爰片久久毛片毛片| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 婷婷久久五月天| 久久久久久亚洲精品不卡| 精品国产乱码久久久久久浪潮| 99久久精品国产高清一区二区| …久久精品99久久香蕉国产| 久久综合综合久久狠狠狠97色88|