C_and_CPP 板


LINE

自認為虛擬繼承的觀念很模糊,通常一多重,自己的答案就很沒信心。 希望強者可以給我淺顯易懂的理解。 Case 1: main1跑下來結果d->virt1()沒問題應該是150沒錯,但Global1( d )跑出來的結果為什麼不是100? #include <stdio.h> class Base1 { public: virtual int virt1() { return 100; } int data1; }; class Derived : public Base1 { public: virtual int virt1() { return 150; } int derivedData; }; int Global1( Base1 * b1 ) { return b1->virt1(); } main1() { Derived * d = new Derived; printf( "%d %d\n", d->virt1(), Global1( d )); } ________ Case 2:Main2跑下來的結果, md->virt1() 應該是150 Global1( md )這個是100還是150自己就沒甚麼信心了。 md->virt2()這個應該也是250 Global2( md )這個應該是250吧? class Base2 { public: virtual int virt2() { return 200; } int data2; }; class MultipleDerived : public Base1, public Base2 { public: virtual int virt1() { return 150; } virtual int virt2() { return 250; } int derivedData; }; int Global2( Base2 * b2 ) { return b2->virt2(); } main2() { MultipleDerived * md = new MultipleDerived; printf( "%d %d %d %d\n", md->virt1(), Global1( md ), md->virt2(), Global2( md )); } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 12.106.68.40
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1469568101.A.84D.html
1F:推 steve1012: Based type pointer 會透過virtual table 指到derived 07/27 05:41
2F:→ steve1012: class virtual function 07/27 05:41
3F:推 Sex5F: 買本書吧,孩子 07/27 06:48
4F:推 SeamusBerloz: 光從字面解釋,在 Global1 函數範圍內把 b1 當作 Ba 07/27 09:06
5F:推 SeamusBerloz: se1 來操作,所以呼叫 Global1(d) 回傳當然是 Base1 07/27 09:11
6F:→ SeamusBerloz: 的定義結果嘍。Global2 自然也是同樣的道理。 07/27 09:11
7F:推 Frozenmouse: 樓上說的行為應該是non-virtual才對吧@@ 07/27 18:08
8F:推 Frozenmouse: virtual 就是像一樓講的 vtable 查表上去,會先查到 07/27 18:11
9F:→ Frozenmouse: 子類別的定義 07/27 18:11
10F:推 steve1012: 繼承的類別都有一個virtual table 是一個表格 裡面放每 07/28 02:10
11F:→ steve1012: 個function的位置 所以你call 的時候他會去查表 自然而 07/28 02:10
12F:→ steve1012: 然就會找到derived class的函數 這樣有比較清楚嗎 07/28 02:10







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP