[導(dǎo)入]虛擬函數(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; }開(kāi)始的時(shí)候感覺(jué)有點(diǎn)迷惑,被調(diào)用的是 base 的 f 呢?還是 derived 的 f(需要進(jìn)行參數(shù)類型轉(zhuǎn)換)。實(shí)驗(yàn)證明,被調(diào)用的是 base 的 f。 因?yàn)橹剌d是根據(jù)靜態(tài)類型來(lái)選擇函數(shù)的,亦即由 pb 本身的類型來(lái)決定。而虛擬則是根據(jù)動(dòng)態(tài)類型來(lái)選擇函數(shù),由 pb 指向的對(duì)象類型決定。因此編譯器首先根據(jù)重載來(lái)選擇一個(gè)基類的函數(shù),如果該函數(shù)為虛擬函數(shù)且被派生類實(shí)現(xiàn),則再通過(guò)多態(tài)機(jī)制調(diào)用派生類函數(shù)。
文章來(lái)源:http://my.donews.com/robinchow/2007/01/11/ocipmucddsvoutkpnwjgeqrlwadgilgxnoma/
posted on 2007-10-23 20:51 Robin Chow 閱讀(87) 評(píng)論(0) 編輯 收藏 引用