青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

攀升·Uranus


Something Different,Something New
數據加載中……

(轉載)圖文例解C++類的多重繼承與虛擬繼承

在過去的學習中,我們始終接觸的單個類的繼承,但是在現實生活中,一些新事物往往會擁有兩個或者兩個以上事物的屬性,為了解決這個問題,C++引入了多重繼承的概念,C++允許為一個派生類指定多個基類,這樣的繼承結構被稱做多重繼承。

  舉個例子,交通工具類可以派生出汽車和船兩個子類,但擁有汽車和船共同特性水陸兩用汽車就必須繼承來自汽車類與船類的共同屬性。

  由此我們不難想出如下的圖例與代碼:

 當一個派生類要使用多重繼承的時候,必須在派生類名和冒號之后列出所有基類的類名,并用逗好分隔。

   
 
#include <iostream
using namespace std; 
 
class Vehicle 

    public
        Vehicle(int weight = 0) 
        { 
            Vehicle::weight = weight; 
        } 
        void SetWeight(int weight) 
        { 
            cout<<"重新設置重量"<<endl; 
            Vehicle::weight = weight; 
        } 
        virtual void ShowMe() = 0; 
    protected
        int weight; 
}; 
class Car:public Vehicle//汽車 

    public
        Car(int weight=0,int aird=0):Vehicle(weight) 
        { 
            Car::aird = aird; 
        } 
        void ShowMe() 
        { 
            cout<<"我是汽車!"<<endl; 
        } 
    protected
        int aird; 
}; 
 
class Boat:public Vehicle//船 

    public
        Boat(int weight=0,float tonnage=0):Vehicle(weight) 
        { 
            Boat::tonnage = tonnage; 
        } 
        void ShowMe() 
        { 
            cout<<"我是船!"<<endl; 
        } 
    protected
        float tonnage; 
}; 
 
class AmphibianCar:public Car,public Boat//水陸兩用汽車,多重繼承的體現 

    public
        AmphibianCar(int weight,int aird,float tonnage) 
        :Vehicle(weight),Car(weight,aird),Boat(weight,tonnage) 
        //多重繼承要注意調用基類構造函數 
        { 
         
        } 
        void ShowMe() 
        { 
            cout<<"我是水陸兩用汽車!"<<endl; 
        } 
}; 
int main() 

    AmphibianCar a(4,200,1.35f);//錯誤 
    a.SetWeight(3);//錯誤 
    system("pause");  
}

  上面的代碼從表面看,看不出有明顯的語發錯誤,但是它是不能夠通過編譯的。這有是為什么呢?
  這是由于多重繼承帶來的繼承的模糊性帶來的問題。

  先看如下的圖示:

 

  在圖中深紅色標記出來的地方正是主要問題所在,水陸兩用汽車類繼承了來自Car類與Boat類的屬性與方法,Car類與Boat類同為AmphibianCar類的基類,在內存分配上AmphibianCar獲得了來自兩個類的SetWeight()成員函數,當我們調用a.SetWeight(3)的時候計算機不知道如何選擇分別屬于兩個基類的被重復擁有了的類成員函數SetWeight()。

  由于這種模糊問題的存在同樣也導致了AmphibianCar a(4,200,1.35f);執行失敗,系統會產生Vehicle”不是基或成員的錯誤。

  以上面的代碼為例,我們要想讓AmphibianCar類既獲得一個Vehicle的拷貝,而且又同時共享用Car類與Boat類的數據成員與成員函數就必須通過C++所提供的虛擬繼承技術來實現。

  我們在Car類和Boat類繼承Vehicle類出,在前面加上virtual關鍵字就可以實現虛擬繼承,使用虛擬繼承后,當系統碰到多重繼承的時候就會自動先加入一個Vehicle的拷貝,當再次請求一個Vehicle的拷貝的時候就會被忽略,保證繼承類成員函數的唯一性

  修改后的代碼如下,注意觀察變化:


#include <iostream
using namespace std; 
 
class Vehicle 

    public
        Vehicle(int weight = 0) 
        { 
            Vehicle::weight = weight; 
            cout<<"載入Vehicle類構造函數"<<endl; 
        } 
        void SetWeight(int weight) 
        { 
            cout<<"重新設置重量"<<endl; 
            Vehicle::weight = weight; 
        } 
        virtual void ShowMe() = 0; 
    protected
        int weight; 
}; 
class Car:virtual public Vehicle//汽車,這里是虛擬繼承 

    public
        Car(int weight=0,int aird=0):Vehicle(weight) 
        { 
            Car::aird = aird; 
            cout<<"載入Car類構造函數"<<endl; 
        } 
        void ShowMe() 
        { 
            cout<<"我是汽車!"<<endl; 
        } 
    protected
        int aird; 
}; 
 
class Boat:virtual public Vehicle//船,這里是虛擬繼承 

    public
        Boat(int weight=0,float tonnage=0):Vehicle(weight) 
        { 
            Boat::tonnage = tonnage; 
            cout<<"載入Boat類構造函數"<<endl; 
        } 
        void ShowMe() 
        { 
            cout<<"我是船!"<<endl; 
        } 
    protected
        float tonnage; 
}; 
 
class AmphibianCar:public Car,public Boat//水陸兩用汽車,多重繼承的體現 

    public
        AmphibianCar(int weight,int aird,float tonnage) 
        :Vehicle(weight),Car(weight,aird),Boat(weight,tonnage) 
        //多重繼承要注意調用基類構造函數 
        { 
            cout<<"載入AmphibianCar類構造函數"<<endl; 
        } 
        void ShowMe() 
        { 
            cout<<"我是水陸兩用汽車!"<<endl; 
        } 
        void ShowMembers() 
        { 
            cout<<"重量:"<<weight<<"頓,"<<"空氣排量:"<<aird<<"CC,"<<"排水量:"<<tonnage<<"頓"<<endl; 
        } 
}; 
int main() 

    AmphibianCar a(4,200,1.35f); 
    a.ShowMe(); 
    a.ShowMembers(); 
    a.SetWeight(3); 
    a.ShowMembers(); 
    system("pause");  
}

  注意觀察類構造函數的構造順序。

  雖然說虛擬繼承與虛函數有一定相似的地方,但讀者務必要記住,他們之間是絕對沒有任何聯系的!

posted on 2008-12-18 11:15 攀升 閱讀(709) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产日产精品一区二区三区四区的观看方式 | 亚洲一区二区三区高清| 欧美成人一区二区三区| 久久精品1区| 在线观看成人一级片| 美女成人午夜| 欧美freesex8一10精品| 亚洲精品无人区| 日韩一级大片| 国产精品视频内| 久久久噜噜噜久久| 久久精品亚洲一区二区| 亚洲国产乱码最新视频| 亚洲国产精品va| 欧美成人精品| 亚洲免费小视频| 新狼窝色av性久久久久久| 好吊色欧美一区二区三区四区| 久久深夜福利| 欧美激情第8页| 亚洲视屏一区| 久久久xxx| 日韩亚洲在线| 香蕉久久夜色精品国产使用方法 | 欧美在线电影| 91久久精品美女高潮| 日韩视频一区二区三区在线播放免费观看 | 欧美国产日韩精品| 欧美激情国产精品| 欧美一区二区三区免费视频| 久久久国产午夜精品| 一区二区三区视频在线| 欧美一进一出视频| 亚洲色在线视频| 久久天堂av综合合色| 亚洲一二三四区| 麻豆成人在线观看| 欧美在线亚洲| 欧美日韩亚洲一区三区 | 亚洲人成在线播放| 亚洲免费中文| 一区二区三区久久| 久久综合久色欧美综合狠狠| 午夜精品成人在线视频| 另类天堂av| 欧美影院午夜播放| 欧美精品乱码久久久久久按摩 | 欧美高清在线一区| 香蕉成人久久| 免费不卡中文字幕视频| 亚洲欧美日韩久久精品| 蜜桃精品久久久久久久免费影院| 国产精品99久久久久久久女警| 性欧美暴力猛交69hd| 亚洲国产日韩欧美在线99| 在线视频中文亚洲| 国产一区二区毛片| 亚洲国产精品va在看黑人| 国产精品乱子久久久久| 亚洲经典三级| 在线成人亚洲| 亚洲欧美日本日韩| 日韩视频在线观看免费| 欧美一区二区在线| 亚洲婷婷综合久久一本伊一区| 久久久久国产精品一区| 亚洲欧美文学| 欧美日韩亚洲激情| 亚洲狠狠丁香婷婷综合久久久| 国产三级欧美三级| av成人免费在线观看| 一区二区三区视频在线观看 | 欧美成人精品不卡视频在线观看| 国产精品久久久久久久久婷婷 | 性久久久久久久久久久久| 欧美精品一区二| 美女视频一区免费观看| 国产日韩专区在线| 香蕉久久国产| 欧美一级精品大片| 国产精品欧美日韩一区| 99在线精品视频在线观看| 亚洲经典在线| 久久久爽爽爽美女图片| 久久久一区二区| 国产亚洲欧美另类中文| 亚洲手机成人高清视频| 欧美一区二视频| 国产精品自拍视频| 午夜精品久久久久久99热软件| 午夜精品美女久久久久av福利| 国产精品久久久久久五月尺| 野花国产精品入口| 亚洲欧美日韩一区二区| 国产精品自拍小视频| 亚洲香蕉网站| 欧美在线影院在线视频| 国产精品尤物福利片在线观看| 亚洲欧美国产不卡| 久久精品国产99国产精品| 国产一区二区三区av电影 | 麻豆精品传媒视频| 亚洲福利视频网| 欧美激情精品| 一片黄亚洲嫩模| 欧美在线视频免费| 狠狠爱综合网| 女生裸体视频一区二区三区| 亚洲激情网站| 亚洲一区欧美| 国产精品色午夜在线观看| 亚洲欧美日韩在线不卡| 蜜臀av国产精品久久久久| 亚洲精品资源美女情侣酒店| 欧美午夜在线视频| 久久成年人视频| 亚洲激情成人网| 欧美在线视频二区| 亚洲欧洲另类| 国产精品一区二区在线观看不卡| 亚洲免费电影在线观看| 免费在线播放第一区高清av| 日韩午夜在线电影| 国产一区欧美日韩| 欧美精品一区二区视频| 午夜一区在线| 亚洲黄一区二区三区| 欧美在线精品免播放器视频| 亚洲国产美女精品久久久久∴| 欧美三区在线观看| 老司机免费视频久久| aa成人免费视频| 男人插女人欧美| 久久精选视频| 亚洲一区一卡| 亚洲精品视频在线播放| 国产日韩一区| 欧美日韩精选| 可以看av的网站久久看| 亚洲欧美亚洲| 99亚洲视频| 亚洲国产欧美一区二区三区久久| 久久久久久久999精品视频| 一区二区三区高清不卡| 在线看视频不卡| 国产亚洲福利社区一区| 欧美吻胸吃奶大尺度电影| 免费观看在线综合| 久久久精彩视频| 欧美一区观看| 亚洲欧美在线磁力| 亚洲色在线视频| 91久久精品日日躁夜夜躁欧美| 欧美大片免费观看| 噜噜噜躁狠狠躁狠狠精品视频| 欧美与欧洲交xxxx免费观看| 亚洲婷婷综合久久一本伊一区| 亚洲国产专区校园欧美| 樱花yy私人影院亚洲| 国产欧美亚洲日本| 国产欧美激情| 国产日韩在线视频| 国产日本欧美在线观看| 国产亚洲欧美激情| 国产一区二区三区黄| 国产小视频国产精品| 国产欧美日韩精品专区| 国产欧美日韩一区| 国产手机视频一区二区| 国产一区二区毛片| 国产中文一区| 伊人狠狠色j香婷婷综合| 国产三级精品三级| 亚洲高清自拍| 亚洲精品国产精品久久清纯直播 | 亚洲在线视频网站| 亚洲欧美成aⅴ人在线观看| 亚洲在线成人精品| 久久国产精品99精品国产| 久久精品免费播放| 暖暖成人免费视频| 久久久欧美精品sm网站| 欧美日韩国产一区二区三区| 欧美三级视频在线观看| 国产欧美一区二区精品仙草咪| 国产亚洲激情在线| 亚洲国产国产亚洲一二三| 日韩视频在线播放| 篠田优中文在线播放第一区| 久久九九国产精品| 欧美大色视频| 亚洲欧美日本精品| 蜜月aⅴ免费一区二区三区| 欧美日韩国产三级| 国产精品嫩草影院av蜜臀| 国产亚洲高清视频| 亚洲三级色网| 久久国产综合精品| 亚洲高清在线观看一区| 日韩午夜免费视频|