Re: [問題] 一個物件以及指標的問題。
看原po對於virtual有一點誤會,我就來小小的說一下好了
依我貼的例子來說(http://nopaste.csie.org/97cb2):
int main()
{
Parent *pp = new Parent();
pp->foo();
Child *cp = (Child *)pp; // 其實它是 Parent
cp->foo();
Parent *pc = new Child();
pc->foo();
Child *cc = (Child *)pc; // 它真的是 Child
cc->foo();
}
當foo不是virtual的時候,依序會呼叫 Parent, Child, Parent, Child
而foo是virtual的時候,呼叫順序就變成了 Parent, Parent, Child, Child
發現了嗎?沒加virtual的時候,順序與等號的左邊,也就是紅色的部份相符
加上virtual之後,就會跟等號的右邊,也就是綠色的部份相符
因此:
(1) 如果沒有virtual,那個指標是什麼類別,它就會呼叫該類別的foo
(2) 如果有virtual,那麼該指標指的是什麼類別的物件,它就會呼叫該類別的foo
也就是說,差別是在於,哪一種指標(編譯期),或者指向什麼東西(執行期)
來判斷該呼叫哪個類別的函式 <=重點是哪個函式
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (11/04 01:03)
※ 編輯: james732 來自: 140.117.171.46 (11/04 01:04)
推
11/04 01:04, , 1F
11/04 01:04, 1F
→
11/04 01:04, , 2F
11/04 01:04, 2F
推
11/04 01:04, , 3F
11/04 01:04, 3F
→
11/04 01:05, , 4F
11/04 01:05, 4F
推
11/04 01:05, , 5F
11/04 01:05, 5F
→
11/04 01:05, , 6F
11/04 01:05, 6F
→
11/04 01:07, , 7F
11/04 01:07, 7F
不過我會比較喜歡加上去,感覺會比較明確 XD
推
11/04 01:07, , 8F
11/04 01:07, 8F
→
11/04 01:07, , 9F
11/04 01:07, 9F
真的,我以前也不知道這是三小....
※ 編輯: james732 來自: 140.117.171.46 (11/04 01:08)
→
11/04 01:08, , 10F
11/04 01:08, 10F
→
11/04 01:09, , 11F
11/04 01:09, 11F
→
11/04 01:09, , 12F
11/04 01:09, 12F
推
11/04 02:40, , 13F
11/04 02:40, 13F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
問題
5
33