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

攀升·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 攀升 閱讀(702) 評論(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>
            国产欧美精品xxxx另类| 麻豆成人av| 欧美日韩精品免费看| 亚洲电影在线看| 美女免费视频一区| 欧美综合第一页| 国产一区自拍视频| 久久精品一区二区三区不卡| 亚洲免费中文| 国产综合久久久久影院| 久久精品视频在线播放| 欧美一区激情| 亚洲国产精品第一区二区三区| 久久蜜桃香蕉精品一区二区三区| 欧美在线视频一区二区| 狼人天天伊人久久| 亚洲国产一区二区三区在线播| 亚洲国产高清aⅴ视频| 蜜桃av噜噜一区二区三区| 亚洲国产精品久久久久秋霞不卡| 美女啪啪无遮挡免费久久网站| 久久久欧美精品sm网站| 91久久精品一区| 夜夜嗨av一区二区三区免费区| 国产精品久久久久av| 久久久久久一区| 欧美精品二区| 小嫩嫩精品导航| 久久青草欧美一区二区三区| 亚洲三级色网| 亚洲影院色无极综合| 一区二区三区在线观看欧美| 久久久综合精品| 欧美精品乱人伦久久久久久 | 久久国产福利| 亚洲乱亚洲高清| 免费日韩成人| 欧美一级专区| 亚洲老板91色精品久久| 亚洲欧美日韩在线不卡| 黄网动漫久久久| 一本一本久久a久久精品综合妖精| 欧美视频一区二区三区四区| 久久人体大胆视频| 欧美天堂亚洲电影院在线观看 | 国内精品久久久久国产盗摄免费观看完整版 | 亚洲视频欧美在线| 亚洲国产日韩在线一区模特| 亚洲一区免费| 亚洲精品中文字幕女同| 欧美一级久久久| 亚洲一区二区三区在线观看视频| 久久久久九九九| 亚洲欧美日韩精品久久奇米色影视 | 欧美日韩中文字幕在线| 欧美激情视频网站| 在线成人激情| 久久久伊人欧美| 另类av一区二区| 曰韩精品一区二区| 久久久久久久性| 欧美国产在线电影| 亚洲精品日韩一| 欧美激情亚洲国产| 99国产精品| 小处雏高清一区二区三区| 国产精品视频一二三| 亚洲欧美国产77777| 久久精品青青大伊人av| 伊人婷婷欧美激情| 免费视频亚洲| 99国产精品视频免费观看一公开| 亚洲天堂av在线免费观看| 欧美午夜电影在线观看| 亚洲一区二区3| 久久精品免费看| 亚洲高清三级视频| 欧美精品手机在线| 亚洲午夜精品网| 久久嫩草精品久久久久| 亚洲茄子视频| 欧美性事免费在线观看| 久久不射中文字幕| 亚洲第一成人在线| 亚洲视频在线观看免费| 国产日本欧美一区二区| 久久久97精品| 日韩一级大片| 久久久久综合网| 99热免费精品| 韩日成人在线| 欧美日韩精品一区| 久久国内精品自在自线400部| 欧美不卡三区| 亚洲欧美一区二区三区久久| 在线不卡亚洲| 久久人人爽人人爽爽久久| 欧美韩日一区二区| 一区二区三区 在线观看视| 国产精品青草久久久久福利99| 久久久成人精品| 一区二区三区欧美亚洲| 欧美**人妖| 欧美在线免费| 一区二区三区高清视频在线观看| 国产一区二区三区精品久久久 | 99视频一区二区三区| 久久深夜福利免费观看| 亚洲一区二区三区在线播放| 亚洲国产日韩欧美| 国产一二三精品| 欧美调教vk| 欧美精品免费视频| 久久三级视频| 欧美一区二区啪啪| 亚洲一卡久久| 日韩视频免费观看高清完整版| 毛片基地黄久久久久久天堂| 午夜精品国产更新| 夜夜夜久久久| 亚洲精品孕妇| 亚洲国产天堂久久综合网| 国产真实久久| 国产精品三级久久久久久电影| 欧美精品在线一区| 久久综合中文| 久久视频这里只有精品| 欧美一区观看| 久久国产精品久久久| 欧美一区二区三区精品| 亚洲一区二区视频在线观看| 99riav1国产精品视频| 亚洲精品国偷自产在线99热| 欧美丰满少妇xxxbbb| 欧美高清视频一二三区| 欧美成人午夜激情视频| 欧美刺激性大交免费视频| 欧美成年人网| 欧美激情久久久| 亚洲福利视频网站| 亚洲精品久久久一区二区三区| 亚洲国产精品福利| 最新亚洲电影| 一本色道久久综合亚洲91 | 欧美在线日韩精品| 久久福利精品| 久久久久国产精品一区三寸 | 99国产精品私拍| 日韩亚洲精品电影| 亚洲一二区在线| 午夜欧美大尺度福利影院在线看| 欧美一区二区免费观在线| 久久gogo国模啪啪人体图| 久久精品91| 欧美大片在线观看一区| 亚洲国产小视频在线观看| 亚洲美女电影在线| 亚洲欧美日韩国产一区二区| 久久99在线观看| 欧美成年视频| 国产精品久久77777| 国产一区二区三区网站| 亚洲高清av| 亚洲一区二区伦理| 久久天堂成人| 亚洲欧洲精品一区二区三区不卡| av成人免费观看| 欧美在线一二三四区| 欧美夫妇交换俱乐部在线观看| 欧美日韩亚洲一区| 国产主播精品在线| 亚洲美女免费精品视频在线观看| 亚洲综合色视频| 欧美电影在线观看| 欧美激情亚洲精品| 最新中文字幕一区二区三区| 亚洲一区免费在线观看| 久久阴道视频| 欧美丝袜一区二区| 亚洲激情第一页| 欧美一区综合| 亚洲人成啪啪网站| 久久成人在线| 国产精品播放| 亚洲精品在线观| 久久先锋资源| 亚洲欧美激情视频| 欧美好骚综合网| 精品99一区二区| 欧美亚洲视频在线观看| 91久久精品国产91久久性色tv | 亚洲国产综合视频在线观看| 欧美在线欧美在线| 欧美肉体xxxx裸体137大胆| 在线免费高清一区二区三区| 午夜伦理片一区| 一区二区三区欧美在线| 欧美激情中文字幕一区二区| 伊人久久大香线| 欧美中文字幕在线|