C_and_CPP 板


LINE

問題(Question): 各位熱心的版友們,小弟是C++新手,對於C++一些細部觀念掌握度不那麼高。 下列的程式題,判斷起來,是在考: 程式在runtion時,呼叫了virtual function與否。 整個題組似乎考得更徹底: 除了用class本身執行內部public的function外, 還用指向class的指標去執行。 由於題組幾乎全考到了,因此請教熱心的版友們, 這個程式題組的執行, 直接執行function,以及使用指向class的指標去執行,結果是否有異? 謝謝各位熱心的版友。 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> class Foo{ public: void f(){ std::cout << "Foo::f()" << std::endl; } virtual void g(){ std::cout << "Foo::g()" << std::endl; } }; class Bar: public Foo{ public: void f(){ std::cout << "Bar::f()" << std::endl; } virtual void g(){ std::cout << "Bar::g()" << std::endl; } }; int main(){ Foo foo; Bar bar; Foo *baz = &bar; Bar *quux = &bar; foo.f(); foo.g(); bar.f(); bar.g(); baz->f(); baz->g(); quux->f(); quux->g(); return 0; } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.52.172
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1502983573.A.9FE.html
1F:推 jerryh001: 丟進電腦跑一次就知道了吧 08/17 23:42
2F:推 shadow0326: 你想知道結果的話可以直接跑跑看呀 然後提出你不懂的 08/17 23:42
3F:→ shadow0326: 部份 08/17 23:42
4F:→ longlongint: 你的想法呢 08/18 00:13
5F:→ fsvy: 回樓上j版友和s版友,我有跑過結果。 不懂的地方在於: 08/18 00:45
6F:→ fsvy: 直接執行function,及使用指向class的指標去執行, 08/18 00:46
7F:→ fsvy: 其結果為何會不同,這點與我想的不一樣。 因此在版上求教。 08/18 00:47
8F:→ fsvy: 即:baz->f(); baz->g(); 這2行的執行結果。 08/18 00:50
9F:→ james732: 你可能要先去查virtual這個字的用途? 08/18 01:01
10F:推 steve1012: 這不是virtual 的本意嗎 08/18 02:39
11F:→ fsvy: 那麼也請教:為什麼bar->f() 和 baz->f()結果會不同呢? 08/18 15:52
12F:→ bibo9901: 哪有不一樣 08/18 16:02
13F:→ Schottky: 真的建議去看一下 virtual 這個字的作用 08/18 16:04
14F:→ bibo9901: 而且還沒考用reference 08/18 16:06
※ 編輯: fsvy (36.224.47.209), 08/18/2017 17:37:45
15F:→ fsvy: 謝謝樓上s大的建議,作為新手,我會再理解virtual的用意。 08/18 17:38
16F:→ fsvy: 若有熱心版友,願意跟我說baz->f()、baz->g()、bar->f()差別 08/18 17:45
17F:→ fsvy: 就在這邊和您(們)先說聲感謝了 08/18 17:45
18F:推 LPH66: 關鍵字: "多型" 有書的話去找這個地方仔細讀 08/18 18:05
19F:→ fsvy: 先謝謝樓上L大的熱心,我一定會仔細研讀的。 08/18 18:11
20F:推 jerryh001: 很大概的講就是 virtual用.的就跟普通函數一樣沒甚麼特 08/18 19:04
21F:→ jerryh001: 別 用->會先確定該物件實際上是哪個class 然後執行該cl 08/18 19:04
22F:→ jerryh001: ass對應的函數 08/18 19:04
23F:推 s4300026: 是不是少了override? 08/18 19:37
24F:→ bibo9901: override 不是必要的 08/18 19:49
25F:推 steve1012: Virtual function 簡化說是你用base class ptr 指向chi 08/18 22:49
26F:→ steve1012: ld class obj並呼叫virtual method 時候會呼叫到child 08/18 22:49
27F:→ steve1012: class 的implementation 08/18 22:49
28F:→ steve1012: 這真的隨便google 就有圖文解說 比看推文還要好懂很多 08/18 22:50
29F:→ steve1012: 為啥不自己上網查一下就好了... 08/18 22:50
30F:→ steve1012: 比發文還快 08/18 22:51
31F:→ poiuy777: 真心覺得在新手面前教繼承根本是耍流氓 最不重要的一環 08/18 23:01
32F:推 steve1012: Override 算是好的practice 08/18 23:08
33F:→ fsvy: 謝謝steve大的熱心解惑. 我想我知道疑惑點了: 08/19 01:54
34F:→ fsvy: 疑惑點是:若用base class ptr指向child class obj,卻不是 08/19 01:57
35F:→ fsvy: 使用virtual method, 會執行base class method的原因。 08/19 01:57
36F:推 steve1012: 不是virtual function 不會在virtual table 裡 base cl 08/19 02:19
37F:→ steve1012: ass pointer 怎麼知道child class 的function 在哪 08/19 02:19
38F:→ fsvy: 感謝steve大的解說。那若不使用base class ptr而使用. 就很 08/19 03:06
39F:→ fsvy: 明確的呼叫各自class內的method,對嗎? 08/19 03:06
40F:推 steve1012: 聽起來沒錯 08/19 08:15
41F:→ fsvy: 謝謝!謝謝steve大,以及各位熱心的板友。 受教了! 08/19 15:18
42F:推 Killercat: 會有這問題大概都是java出身的 因為java沒有virtual關 08/21 14:20
43F:→ Killercat: 鍵字,預設是每個function都是virtual除非final 08/21 14:21
44F:→ Killercat: 只能說這要花點時間習慣(@Override這annotation非強制) 08/21 14:22







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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP