1. 程式人生 > >C++派生類中與基類同名函式的呼叫問題

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)