[問題] C++宣告物件和繼承的問題

看板C_and_CPP作者 (中山的遊客)時間10年前 (2014/01/21 18:58), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 問題(Question): 為何是印出" P C P P "的結果? 困擾了一下午的問題....想不太懂還請高手指導...謝謝 程式碼(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(); //一直以為是印出"P C C C" 結果是印出"P C P P" pc->foo();//pc不是該指向c 所以應該會操作c的metod? rc.foo();//rc也是同上? return 0;//還是說因為原來宣告是P 所以會操作P的metod? //也不是很明白C++在這幾行程式碼中實際運作的情況 //感恩... } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.238.199.157

01/21 18:59, , 1F
你需要看一下 virtual 這個字的用途
01/21 18:59, 1F

01/21 19:11, , 2F
恩,謝謝virtual我明白了,但是我還有不解的地方,P &rc=c是說
01/21 19:11, 2F

01/21 19:12, , 3F
把rc參考到c這物件嗎? 或是說我那裡會錯意了?
01/21 19:12, 3F

01/21 21:17, , 4F
你就當成rc是c的別名
01/21 21:17, 4F

01/21 21:42, , 5F
@yscgk 是參考到 c 物件, 但是實際上還是當 P 用
01/21 21:42, 5F
#int main() { P p; C c; P a; P b=c; a=c; //謝謝以上的大大和ppc大大 a.foo(); //我又有一個問題 b.foo(); //像這樣 印出來的結果也是"P P" //印出的是C的父類別P的foo() //還是原本a b物件的foo()呢? return 0; } ※ 編輯: yscgk 來自: 36.238.199.157 (01/21 22:35)

01/22 00:52, , 6F
建議可以google vptr跟vtablec會比較清楚繼承的function
01/22 00:52, 6F

01/22 00:52, , 7F
的實作 *vtable
01/22 00:52, 7F
文章代碼(AID): #1ItbBkXH (C_and_CPP)