亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++的虛繼承

2019-11-06 07:23:56
字體:
來源:轉載
供稿:網友

本文

1.為什么要引入虛擬繼承

虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如:類D繼承自類B1、B2,而類B1、B2都繼承自類A,因此在類D中兩次出現類A中的變量和函數。為了節省內存空間,可以將B1、B2對A的繼承定義為虛擬繼承,而A就成了虛擬基類。實現的代碼如下:

class A

class B1:public virtual A;

class B2:public virtual A;

class D:public B1,public B2;

虛擬繼承在一般的應用中很少用到,所以也往往被忽視,這也主要是因為在C++中,多重繼承是不推薦的,也并不常用,而一旦離開了多重繼承,虛擬繼承就完全失去了存在的必要因為這樣只會降低效率和占用更多的空間。

 

2.引入虛繼承和直接繼承會有什么區別呢

由于有了間接性和共享性兩個特征,所以決定了虛繼承體系下的對象在訪問時必然會在時間和空間上與一般情況有較大不同。

2.1時間:在通過繼承類對象訪問虛基類對象中的成員(包括數據成員和函數成員)時,都必須通過某種間接引用來完成,這樣會增加引用尋址時間(就和虛函數一樣),其實就是調整this指針以指向虛基類對象,只不過這個調整是運行時間接完成的。

2.2空間:由于共享所以不必要在對象內存中保存多份虛基類子對象的拷貝,這樣較之多繼承節省空間。虛擬繼承與普通繼承不同的是,虛擬繼承可以防止出現diamond繼承時,一個派生類中同時出現了兩個基類的子對象。也就是說,為了保證這一點,在虛擬繼承情況下,基類子對象的布局是不同于普通繼承的。因此,它需要多出一個指向基類子對象的指針。

 

3.筆試,面試中??嫉腃++虛擬繼承的知識點

第一種情況:         第二種情況:          第三種情況            第四種情況:class a           class a              class a              class a{              {                {                 {    virtual void func();      virtual void func();       virtual void func();        virtual void func();};              };                  char x;              char x;class b:public virtual a   class b :public a           };                };{              {                class b:public virtual a      class b:public a    virtual void foo();        virtual void foo();     {                 {};              };                  virtual void foo();        virtual void foo();                               };                };

如果對這四種情況分別求sizeof(a),  sizeof(b)。結果是什么樣的呢?下面是輸出結果:(在vc6.0中運行)第一種:4,12 第二種:4,4第三種:8,16第四種:8,8

想想這是為什么呢?

因為每個存在虛函數的類都要有一個4字節的指針指向自己的虛函數表,所以每種情況的類a所占的字節數應該是沒有什么問題的,那么類b的字節數怎么算呢?看“第一種”和“第三種”情況采用的是虛繼承,那么這時候就要有這樣的一個指針vptr_b_a,這個指針叫虛類指針,也是四個字節;還要包括類a的字節數,所以類b的字節數就求出來了。而“第二種”和“第四種”情況則不包括vptr_b_a這個指針,這回應該木有問題了吧。

第一個:vfptr(b:foo)+vbptr+vfptr(a:func)=12第二個:vfptr(a:func, b:foo)=4(兩個類大小為1,內存對齊為4)第三個:vfptr(b:foo)+vbptr+vfptr(a:func)+x(對齊為四個字節)=16第四個:vfptr(a:func, b:foo)+x(對齊為四個字節)=8

 

4.c++重載、覆蓋、隱藏的區別和執行方式

既然說到了繼承的問題,那么不妨討論一下經常提到的重載,覆蓋和隱藏4.1成員函數被重載的特征(1)相同的范圍(在同一個類中); (2)函數名字相同; (3)參數不同; (4)virtual 關鍵字可有可無。 4.2“覆蓋”是指派生類函數覆蓋基類函數,特征是:(1)不同的范圍(分別位于派生類與基類); (2)函數名字相同; (3)參數相同; (4)基類函數必須有virtual 關鍵字。 4.3“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,特征是:

(1)如果派生類的函數與基類的函數同名,但是參數不同,此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。 (2)如果派生類的函數與基類的函數同名,但是參數相同,但是基類函數沒有virtual 關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)。

小結:說白了就是如果派生類和基類的函數名和參數都相同,且有virtual關鍵字,屬于覆蓋,這是可以理解的吧,完全一樣當然要覆蓋了;如果只是函數名相同,參數并不相同,則屬于隱藏。

4.4 三種情況怎么執行:

4.4.1 重載:看參數。

4.4.2 隱藏:用什么就調用什么。

4.4.3 覆蓋:調用派生類。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
77777少妇光屁股久久一区| 国产日韩欧美91| 亚洲色图色老头| 另类天堂视频在线观看| 成人国产精品av| 日韩最新在线视频| 国产成人中文字幕| 欧美成人激情视频免费观看| 国产精品成人国产乱一区| 亚洲国产精品久久| 青青久久av北条麻妃黑人| 日韩激情在线视频| 国产成人一区二区三区电影| 丝袜一区二区三区| 欧美成人免费在线观看| 中文字幕亚洲在线| 日韩精品中文字幕在线观看| 亚洲精品国偷自产在线99热| 日韩亚洲综合在线| 亚洲va欧美va国产综合久久| 国产精品久久精品| 国产mv免费观看入口亚洲| 疯狂蹂躏欧美一区二区精品| 亚洲黄色片网站| 精品久久久国产精品999| 亚洲色图校园春色| 欧美大片在线影院| 亚洲人成免费电影| 国产精品稀缺呦系列在线| 亚洲视频专区在线| 国产一区二区免费| 中文字幕视频一区二区在线有码| 午夜精品福利电影| 国产精品久久久久久久av大片| 亚洲欧美在线看| 国产精品夫妻激情| 欧美一级电影久久| 亚洲片国产一区一级在线观看| 国产日本欧美一区| 亚洲性生活视频在线观看| 欧美日韩成人网| 国产ts一区二区| 亚洲iv一区二区三区| 欧美亚洲国产视频| 国产91热爆ts人妖在线| 国产精品久久久久久久9999| 欧美富婆性猛交| 日本成人免费在线| 中文字幕精品国产| 国产在线精品播放| 国产性色av一区二区| 亚洲成人久久网| 亚洲香蕉成人av网站在线观看| 久久99亚洲精品| 欧美xxxx做受欧美.88| 亚洲www永久成人夜色| 日本a级片电影一区二区| 国产亚洲精品一区二555| www.日本久久久久com.| 国产一区二区欧美日韩| 欧美巨乳美女视频| 国产成人极品视频| 欧美极品xxxx| 51色欧美片视频在线观看| 日韩有码视频在线| 久久久久久久久久久国产| 久久久97精品| 日韩精品视频观看| 色综合久久中文字幕综合网小说| 国产精品在线看| 青青草国产精品一区二区| 中文字幕亚洲一区二区三区五十路| 欧美亚洲在线观看| 亚洲欧美激情一区| 92看片淫黄大片欧美看国产片| 国产精品一区二区久久久| 热re91久久精品国99热蜜臀| 亚洲国产成人av在线| 日韩精品视频免费专区在线播放| 久久久噜久噜久久综合| 欧美激情在线观看视频| 国产欧美一区二区三区久久人妖| 亚洲护士老师的毛茸茸最新章节| 国产综合福利在线| 亚洲男子天堂网| 国产精品国产亚洲伊人久久| 日韩精品欧美国产精品忘忧草| 亚洲一区二区三区sesese| 亚洲精品xxxx| 欧美日韩国产在线播放| 中文字幕日韩精品有码视频| 久久久精品在线观看| 日韩少妇与小伙激情| 欧美日韩xxx| 亚洲精品动漫久久久久| 精品国产视频在线| 亚洲偷熟乱区亚洲香蕉av| 97在线看免费观看视频在线观看| 国产精品露脸自拍| 日韩一区二区av| 78m国产成人精品视频| 国产香蕉一区二区三区在线视频| www.日韩欧美| 国产欧美一区二区白浆黑人| 久久国产精品免费视频| 亚洲一区精品电影| 97超级碰碰碰| 日韩经典第一页| 亚洲欧美日韩成人| 日韩中文字幕在线| 国产在线观看精品| 尤物九九久久国产精品的特点| 国产在线精品自拍| 欧美成人激情视频| 欧美成人午夜剧场免费观看| 77777亚洲午夜久久多人| 国产精品久久在线观看| 欧美性猛交xxxxx水多| 亚洲精品国产精品久久清纯直播| 国产精品成人观看视频国产奇米| 久久久久久久久久久久av| 欧美中文在线观看国产| 日韩欧美大尺度| 亚洲电影天堂av| 欧美有码在线观看| 国产精品夜间视频香蕉| 国产精品成人播放| 精品视频久久久| 91sa在线看| 日韩视频在线一区| 欧美猛交ⅹxxx乱大交视频| 不卡av在线播放| 欧美黄色三级网站| 成人做爽爽免费视频| 伊人久久免费视频| 青青精品视频播放| 国产精品美乳在线观看| 国产日本欧美一区| 在线视频免费一区二区| 91精品久久久久久久久中文字幕| 神马国产精品影院av| 欧美精品久久久久久久免费观看| 日韩国产精品亚洲а∨天堂免| 精品国产31久久久久久| 久久91亚洲人成电影网站| 欧美www视频在线观看| 亚洲精选中文字幕| 久热在线中文字幕色999舞| 国产欧美精品在线| 国产精品亚发布| 国产视频精品xxxx| 亚洲成人精品av| 88xx成人精品| 国产精品久久综合av爱欲tv| 91嫩草在线视频| 亚洲色图第一页| 国产精品美女主播在线观看纯欲| 亚洲а∨天堂久久精品喷水| 欧美精品18videos性欧| 懂色av一区二区三区| 一区二区三区四区在线观看视频| 精品人伦一区二区三区蜜桃免费| 亚洲乱码国产乱码精品精| 欧美亚洲视频一区二区|