看板 C_and_CPP 關於我們 聯絡資訊
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