[問題] 繼承與型態轉換的問題

看板C_and_CPP (C/C++)作者 ( )時間14年前 (2011/09/29 09:38), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> using namespace std; class P { public: void foo() { cout << 'P'; } }; class C : public P { public: void foo() { cout << 'C'; } }; int main() { P p; C c; P *pc = &c; P &rc = c; p.foo(); c.foo(); pc->foo(); rc.foo(); return 0; } 補充說明(Supplement): 這是今年普考的題目之一 問印出的字串為何 答案為PCPP 第一個P我想應該不會有疑問 第二個C我的想法是因為Class C裡的函式名稱跟Class P裡的一樣 所以覆蓋過去 因此Class C裡等於沒有繼承到Class P的foo函式 因此印出來的是C 第三個P就不懂了 是因為型別轉換嗎? P *pc = &c實際上處理時會是P *pc =(P)&c嗎? 第四個P應該是跟第三個同樣的東西 只是弄不懂第三個 囧 有實際上用VC++去跑過 的確是PCPP沒錯 煩請版友幫忙解答了 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.219.57.129

09/29 10:02, , 1F
第三跟第四就是 P::foo() 函數有被 c 物件繼承
09/29 10:02, 1F

09/29 10:03, , 2F
P *pc = &c; 實際上不會是 (P) &c 而會是 (P *) &c
09/29 10:03, 2F

09/29 16:48, , 3F
@@
09/29 16:48, 3F
Sunofgod:轉錄至看板 Examination 09/30 09:17

10/05 00:24, , 4F
foo不是virtual所以不會在runtime去找v-table
10/05 00:24, 4F
文章代碼(AID): #1EWyl_Ic (C_and_CPP)
文章代碼(AID): #1EWyl_Ic (C_and_CPP)