C++派生類中與基類同名函式的呼叫問題
本文所探討的問題建立在公共繼承的公有函式的基礎上。
一、派生類,即子類中的函式與基類的函式的情況有以下三種。
1、不是同名函式
2、函式名相同,形參的個數或型別不同。
3、函式名相同,形參的個數和型別也相同。
二、接下來就這三種情況探討子類呼叫基類函式的問題
1、在一般情況下,子類中的函式與基類的函式不是同名函式,此時,可以直接通過子類物件呼叫基類的函式。
例: 基類CBase 基類函式 print ( int a)
子類CDeprive 子類函式 deprint ( float b) 子類物件 deprive //宣告CDeprive deprive;
可以通過子類物件直接呼叫基類的函式 deprive.print ( int a);
2、當子類中的函式與基類的函式,函式名相同,形參的個數或型別不同時,不能直接用子類物件呼叫(直接呼叫編譯也會提示錯誤)。
此時要從子類中訪問基類的函式有兩種方法:
1、定義基類指標,讓基類指標指向派生類物件,用指標呼叫基類函式。
2、顯示呼叫基類函式,既在基類函式之前加上基類名和域說明符。
例: 基類函式 print ( int a) 基類指標 pt CBase * pt;
子類函式 print ( float b) 子類物件 deprive
使基類指標指向子類 pt=&deprive;
通過基類指標呼叫基類函式 pt->print(c); c為自定義的int實參。
顯示呼叫基類函式 deprive.CBase::print(c);
3、子類中存在和基類中同名同參的函式,這時候基類的函式會被子類的函式覆蓋,直接用子類物件呼叫同名函式會預設呼叫子類的函式。
此時要從子類中訪問基類的函式有也是有兩種方法,與第二種情況方法相同,不再贅述。
同名同參函式舉例
基類函式print ( int a)
子類函式print ( int b)