C++ 继承与多态
C++ 繼承與多態
一、繼承
1、繼承方式:public,protected,private
public繼承:父類的 public、protected保持不變,private 不可見
protected繼承:父類的 public 變為protected、protected保持不變、private 不可見
private繼承:父類的 public、protected 變為private,private 不可見
2、子類創建與刪除
實例化子類:構造函數調用順序為先父類后子類
刪除子類對象:析構函數調用順序為先子類后父類
3、覆蓋
父類和子類函數名相同,不管返回值和參數是否相同。
父類中的同名函數仍然存在,子類中通過Father::fun()訪問父類的同名函數
二、多態:父類指針調用子類方法
1、虛函數(重寫)
父類和子類的函數/方法名、返回類型和參數表都要一樣
構造函數不能是虛函數
2、虛析構函數
正常情況下刪除父類對象時不會調用子類的虛構函數,虛析構函數可以解決。
# 父類中 virtual ~Father(){ cout << "delete father" << endl;} # 子類中 ~Son(){ cout << "delete son" << endl;}3、純虛函數(抽象類、接口類)
包含純虛函數的類不能實例化。純虛函數在父類中不用定義,在需要實例化的子列中需要定義
#include <iostream> using namespace std;# 抽象類 class Father { public:# 純虛函數virtual void fun() = 0; };# 子類 class Son: public Father { public:virtual void fun(){cout << "Son" << endl;} };4、虛繼承
菱形繼承:B、C 繼承自 A 時B、C各有一份A的類屬性,D繼承與B、C時,D會同時繼承 B、C 中的 A 的類屬性從而發生沖突。
虛繼承可以解決多繼承訪問不明確,只要在中間層虛繼承就行,相當于最父類的只有一份類屬性,有點類似于靜態成員
class B: virtual public A{};class C: virtual public A{};總結
- 上一篇: Java微服务篇2——SpringClo
- 下一篇: C++ 关键字 extern