基類和派生類之間的同名函數處理方式
阿新 • • 發佈:2019-01-26
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
基類和派生類之間的同名函數處理方式