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

攀升·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 攀升 閱讀(703) 評論(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>
            亚洲视频在线二区| 在线亚洲高清视频| 久久国产精品一区二区三区| 快播亚洲色图| 欧美在线观看你懂的| 久久九九国产精品怡红院| 亚洲美女视频在线观看| 欧美国产日韩一二三区| 亚洲第一网站免费视频| 久久婷婷久久一区二区三区| 久久国产毛片| 亚洲欧美日韩精品一区二区| 久久免费少妇高潮久久精品99| 亚洲一区二区三区高清 | 久久婷婷一区| 欧美成人精品高清在线播放| 欧美国产免费| 亚洲自拍偷拍麻豆| 欧美成人免费一级人片100| 欧美日本不卡高清| 国产自产精品| 亚洲最黄网站| 欧美电影免费观看高清| 宅男精品视频| 欧美日韩www| 一区二区亚洲精品国产| 亚洲一区免费观看| 亚洲成在线观看| 香蕉尹人综合在线观看| 欧美精品日韩一本| 亚洲国产精品va在线看黑人动漫| 亚洲欧美成人一区二区在线电影 | 国产精品一二三| 亚洲黄色天堂| 亚洲国产影院| 久久婷婷国产麻豆91天堂| 亚洲剧情一区二区| 欧美日韩免费观看一区=区三区| 亚洲电影下载| 欧美国产精品专区| 蜜桃av噜噜一区| 亚洲日韩第九十九页| 亚洲电影免费观看高清完整版在线观看| 亚洲欧美视频一区| 极品裸体白嫩激情啪啪国产精品| 久久爱91午夜羞羞| 美国成人直播| 亚洲专区在线视频| 亚洲欧美一区二区精品久久久| 国产精品成人免费精品自在线观看| 亚洲视频免费看| 久久久一二三| 亚洲欧美日韩国产综合| 欧美影院在线播放| 亚洲免费不卡| 久久国产精品99精品国产| 亚洲国产婷婷| 久久精品视频免费播放| 亚洲国产欧美精品| 亚洲影院一区| 亚洲美女毛片| 久久久久久久久久久一区| 一区二区激情| 麻豆精品精品国产自在97香蕉| 亚洲视频日本| 欧美啪啪成人vr| 欧美激情视频给我| 国产综合色在线| 亚洲欧美日本精品| 欧美亚洲日本一区| 国产精品国产自产拍高清av| 亚洲欧洲美洲综合色网| 亚洲欧美日韩久久精品| 一区二区三区色| 欧美国产综合视频| 亚洲激情偷拍| 亚洲乱码国产乱码精品精| 久久久99免费视频| 久久久久网址| 亚洲日韩欧美视频| 欧美成人黑人xx视频免费观看 | 国产精品男女猛烈高潮激情| 欧美黄色成人网| 99这里只有精品| 欧美午夜精品久久久久久人妖| 亚洲片区在线| 欧美亚洲日本国产| 亚洲精品123区| 欧美日韩一区二区三区四区在线观看| 亚洲黄一区二区| 香蕉视频成人在线观看 | 久久亚洲春色中文字幕| 欧美插天视频在线播放| 亚洲乱码国产乱码精品精98午夜| 欧美成人精品1314www| 一本不卡影院| 麻豆精品视频在线观看| 亚洲丝袜av一区| 激情视频一区| 国产女主播一区二区三区| 久久人91精品久久久久久不卡| 亚洲国产成人av好男人在线观看| 中文在线资源观看网站视频免费不卡| 国产精品久久久久久av下载红粉| 久久久久久一区| 香蕉尹人综合在线观看| 亚洲精品一区在线观看| 国产一区欧美日韩| 国产精品豆花视频| 欧美日本国产一区| 欧美国产91| 欧美—级a级欧美特级ar全黄| 欧美在线观看一区二区三区| 一本一本久久a久久精品综合妖精| 裸体歌舞表演一区二区| 久久久久免费观看| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲在线黄色| 亚洲欧美日韩一区在线观看| 在线视频欧美日韩精品| 洋洋av久久久久久久一区| 91久久精品网| 99国产欧美久久久精品| 亚洲伦理在线| 亚洲欧美中文字幕| 久久精品动漫| 亚洲精品欧美一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美激情视频免费观看| 亚洲片在线资源| 亚洲在线免费| 美女图片一区二区| 欧美三级欧美一级| 韩国精品主播一区二区在线观看| 国产一区免费视频| 一区二区av在线| 麻豆精品视频| 亚洲欧美一区二区原创| 嫩草国产精品入口| 国产日韩精品一区二区三区在线 | 欧美成人69| 欧美日韩一区在线视频| 亚洲成人在线视频播放| 亚洲一区三区视频在线观看| 免费观看国产成人| 亚洲免费在线| 国产精品捆绑调教| 欧美视频四区| 亚洲国产精品激情在线观看| 香蕉久久一区二区不卡无毒影院| 欧美韩国在线| 卡通动漫国产精品| 影音先锋亚洲精品| 欧美电影在线播放| 免费观看成人www动漫视频| 国产资源精品在线观看| 午夜天堂精品久久久久| 亚洲永久字幕| 一区免费观看视频| 欧美 日韩 国产一区二区在线视频| 欧美一二三区在线观看| 国产精品日韩电影| 久久久久久夜精品精品免费| 欧美一级午夜免费电影| 狠狠久久亚洲欧美专区| 免费一级欧美片在线观看| 狼狼综合久久久久综合网| 亚洲国产日韩欧美在线图片| 欧美不卡福利| 欧美亚州一区二区三区 | 国产婷婷色一区二区三区| 久久av一区二区三区| 老鸭窝亚洲一区二区三区| 99国产精品久久久久久久| 亚洲一区二区三区在线| 国产专区精品视频| 日韩香蕉视频| 1024国产精品| 亚洲视频免费| 日韩午夜在线| 久久久精品性| 国产精品久久一区二区三区| 日韩午夜免费视频| 久久精品亚洲| 欧美在线三区| 国产精品一区二区你懂的| 91久久精品一区二区别| 国产综合婷婷| 久久aⅴ国产欧美74aaa| 性欧美办公室18xxxxhd| 欧美视频手机在线| 99re热精品| 久久久午夜电影| 亚洲欧美日韩一区| 欧美视频中文字幕| 亚洲天堂免费在线观看视频| 中文有码久久| 国产精品欧美久久久久无广告| 中日韩高清电影网| 国产精品成人一区二区三区吃奶 |