虛擬函數就是說一個物件指標函數有多個實作介面。
基本上在基底類別的指標指向衍生類別時,並不會發生錯誤,但是,此基底類別的指標還是只能使用基底類別的成員,不能使用衍生類別的函數。
(但是,把衍生類別的指標指向基底類別時,則會發生錯誤)。
透過virtual function,
我們可以同時在基底類別中與衍生類別中定義相同名稱的虛擬函數。會有以下兩個情況:
1. 當我們把基底類別的指標指到基底類別中時,執行出來的會是我們定義在基底類別中的函數
2. 當我們把基底類別的指標指到衍生類別中時,執行出來的會是我們定義在衍生類別中的函數
換句話說,
當你的基礎類別的指標指到衍生類別的物件時,本來是不能使用衍生類別所定義的function,但是,若我們在基底類別的function前加入virtual時,我們在衍生類別重新定義這一個函數,這個時候指到衍生類別物件的基底類別的指標就可以呼叫由衍生類別重新定義的function
若基底類別的某一個function想要給衍生類別重新定義,則在基底類別中function前加virtual,而衍生類別的function前不需要加virtual,除非衍生類別仍希望繼承它的衍生類別會重新定義它的function
[2008.9.5]補充
之前一直在想說,為啥要設定成基底的指標指到衍生物件?
現在才發現就是使用在副程式上的啦~
本來這一個副程式是設計給基底類別使用的~因此,當在使用時,是用衍生類別傳過來~
使用的剛好就是基底類別的動作~
而這裡有一個重點:如果跟上面的情況是一樣的,但是,要更新上面的function,這個時候就要用virtual function就是可以改寫衍生類別的function,使得當衍生類別使用基底類別的function時,可以呼叫已更新過的function,很有用喔~
參考資料:虛擬函式(Virtual function)
沒有留言:
張貼留言