一、虛函數
概念:在函數前面加virtual,就是虛函數
虛函數的一些概念:
只有成員函數才可定義為虛函數,友元/全局/static/構造函數都不可以
虛函數需要在函數名前加上關鍵字virtual
成員函數如果不是虛函數,其解析過程發生在編譯時而非運行時
派生類可以不覆蓋(重寫)它繼承的虛函數
重寫(覆蓋)的概念與規則
派生類重寫(覆蓋)基類中的函數,其中函數名,參數列表,返回值類型都必須一致,并且重寫(覆蓋)的函數是virtual函數
虛函數在子類和父類中的訪問權限可以不同
相關規則:
①如果虛函數的返回值類型是基本數據類型:返回值類型必須相同
②如果虛函數的返回值類型是類本身的指針或引用:返回值類型可以不同,但派生類的返回值類型小于基類返回值類型
基類與派生類的虛函數名與參數列表相同,至于參數列表為什么一致是為了避免虛函數被隱藏
函數返回值有以下要求:
class A {public:int a;public:A(int num) :a(num) {};virtual A& func() {}; //虛函數};class B:public A{public