[問題] 虛擬函式的來由

看板C_and_CPP作者 ( //StrategyBass)時間15年前 (2011/01/19 18:25), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 這是C++的問題,目前應該跟平台無關 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 為什麼「如果你以一個基礎類別之指標指向一個衍生類別之物件,那麼透過該指標你就只 能夠呼叫基礎類別所定義之成員函式」? 書說,這就是我們需要虛擬的原因。 也就是說,我不了解,為什麼只能呼叫base class的member function, 而不能因為指標已經指到derived class的object,而去呼叫 該class中的member function? 餵入的資料(Input):預期的正確結果(Expected Output):錯誤結果(Wrong Output):程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.88.200 ※ 編輯: ikari512 來自: 220.128.88.200 (01/19 18:26)

01/19 18:47, , 1F
效能考量唄 虛擬函數呼叫成本比較高 而不是每個成員函數
01/19 18:47, 1F

01/19 18:47, , 2F
都需要這種特性
01/19 18:47, 2F
ikari512:轉錄至看板 Programming 01/19 18:59

01/19 18:59, , 3F
所以就是C++的語言特性與規定嗎?
01/19 18:59, 3F

01/19 19:13, , 4F
因為靜態綁定 有virtual才有動態 執行期才會呼叫到Derive
01/19 19:13, 4F

01/19 19:14, , 5F
靜態綁定的時候 你指標是什麼型態 呼叫的就是什麼型態
01/19 19:14, 5F

01/19 19:17, , 6F
是C++語言的特性阿
01/19 19:17, 6F

01/19 20:36, , 7F
看不太懂, 透過base指標不是本來就只能指涉base成員嗎?
01/19 20:36, 7F

01/19 20:51, , 8F
編譯時期 compiler 只能根據你指標或 ref 的型別去做
01/19 20:51, 8F

01/19 20:53, , 9F
語法檢查, 他根本不知道你呼叫子類別的某個方法是不是
01/19 20:53, 9F

01/19 20:53, , 10F
合理的, 當然會變成這種結果, 所謂的虛擬函式就是透過
01/19 20:53, 10F

01/19 20:54, , 11F
另一個手法讓被呼叫的函式執行時才確定下來, 不過sign
01/19 20:54, 11F

01/19 20:55, , 12F
ature 限制要一樣也是有運行上的考量
01/19 20:55, 12F
文章代碼(AID): #1DDhmd8y (C_and_CPP)