[導入]虛擬函數(shù)和重載
如下面的程序:#include < iostream > using namespace std;class base{ public: virtual void f(char i){ cout << "Base class: " << i << endl; }; virtual void f(double d){ cout << "Base class: " << d << endl; } }; class derived : public base{ public: void f(char i){ cout << "Derived class: " << i << endl; } }; int main(int argc, char** argv) { base *pb = new derived; pb->f(2.0); delete pb; return 0; }開始的時候感覺有點迷惑,被調(diào)用的是 base 的 f 呢?還是 derived 的 f(需要進行參數(shù)類型轉(zhuǎn)換)。實驗證明,被調(diào)用的是 base 的 f。 因為重載是根據(jù)靜態(tài)類型來選擇函數(shù)的,亦即由 pb 本身的類型來決定。而虛擬則是根據(jù)動態(tài)類型來選擇函數(shù),由 pb 指向的對象類型決定。因此編譯器首先根據(jù)重載來選擇一個基類的函數(shù),如果該函數(shù)為虛擬函數(shù)且被派生類實現(xiàn),則再通過多態(tài)機制調(diào)用派生類函數(shù)。
文章來源:http://my.donews.com/robinchow/2007/01/11/ocipmucddsvoutkpnwjgeqrlwadgilgxnoma/
posted on 2007-10-23 20:49 Robin Chow 閱讀(77) 評論(0) 編輯 收藏 引用

