1. 程式人生 > >基類和派生類之間的同名函數處理方式

基類和派生類之間的同名函數處理方式

details ret nvme target 同名 意思 str 方式 無法

基類和派生類之間的同名函數處理方式

class A  
{  
public:  
    void fn()  
    {}  
  
    void fn(int a)  
    {}  
};  
  
class B : public A  
{  
public:  
    void fn()   
    {}  
};  
  
int main()  
{  
    B b;  
    b.fn(3);  // 編譯失敗,編譯器會報怨,B中,並不存在fn(int)的函數)。
    return 0;  
}  

  這裏涉及到一個C++中的重要的知識點。即:同名函數的重載動作,只發生在自由函數(即非成員),及同一個class/struct內部的函數之間。而不能跨越基類和派生類。當派生類寫一個和基類同名(無論參數列表相同或不相同)的函數時,此時發生的動作叫“覆蓋”。覆蓋的意思,就是基類的同名函數,在派生類內,將變得無法直接調用(但可以間接調用)。

參考:

1、https://blog.csdn.net/jinvmen/article/details/48311445

基類和派生類之間的同名函數處理方式