作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] 虛擬函數練習
時間Sat May 8 12:55:49 2010
void demo1(A t){t.print_msg();}
不管傳入這個函式的那個物件,它的 type 是 A, B, C
由於這個函式使用 call by value
一定會造成一個 copy 的動作,而
製造出一個 A
接下來的 print_msg 也必然會呼叫 A 的函式
void demo2(A &t){t.print_msg();}
這個函式接收的是 reference,它不會有 copy 的動作
你傳 B 就收到 B, 你傳 C 就收到 C
因此 print_msg 也會根據你所傳的是哪個型別,而做選擇
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
推 tabinoyume:我傳B 但是然後編譯器做隱含轉換成A 不是這樣嗎? 05/08 13:03
→ tabinoyume:所以t應該被解讀成A //我是這麼想的 05/08 13:04
→ james732:你講的是 by val 還是 by ref 的? 05/08 13:04
→ tabinoyume:by ref 05/08 13:05
→ james732:可以去查查C++如何實作多型…virtual function table 05/08 13:09
推 hilorrk:多型 != 隱式轉換 05/08 14:32