【基類和派生類之間的同名函數處理方式】函數
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