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

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

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內部的函數之間。而不能跨越基類和派生類。當派生類寫一個和基類同名(不管參數列表相同或不相同)的函數時,此時發生的動做叫「覆蓋」。覆蓋的意思,就是基類的同名函數,在派生類內,將變得沒法直接調用(但能夠間接調用)。spa

參考:.net

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

相關文章
相關標籤/搜索