在成員函數中調用虛函數(關於多態的註意事項)------新標準c++程序設計
阿新 • • 發佈:2018-01-10
通過 rtu blog 析構 多態 space str ret public
類的成員函數之間可以互相調用。在成員函數(靜態成員函數、構造函數和析構函數除外)中調用其他虛成員函數的語句是多態的。例如:
#include<iostream> using namespace std; class CBase { public: void func1() { func2(); } virtual void func2(){cout<<"CBase::func2()"<<endl;} }; class CDerived:public CBase { public: virtual void func2(){cout<<"CDeriver::func2()"<<endl;} }; int main() { CDerived d; d.func1(); return 0; }
輸出:
CDeriver::func2()
第20行調用func1成員函數。進入func1成員函數,執行到第8行,調用func2函數。看起來調用的應該是CBase類的func2成員函數,但輸出結果證明實際上調用的是CDerived類的func2成員函數。這是因為,在func1函數中,“func2();”等價於“this->func2();”,而this指針顯然是CBase*類型的,即是一個基類指針,那麽“this->func2();”就是在通過基類指針調用虛函數,因此這條函數調用語句就是多態的。當本程序執行到第8行時,this指針指向的是一個CDerivrd類的對象,即d,因此被調用的是CDerived類的func2成員函數。
新標準c++程序設計
在成員函數中調用虛函數(關於多態的註意事項)------新標準c++程序設計