1、分類(c++中的多型多指動態)
1、靜態多型
-函式過載、運算子過載,發生在編譯階段的多型。
2、動態多型
-派生類和虛函式實現的,發生在執行階段的多型。
2、特點
**組織清晰
可讀性強
利於前期和後期維護
3、多型使用
1、兩種多型實現方式
父類引用,執行子類物件
class
base};
class
son:
public base };
void
dofunc
(base &b)
void
test()
父類指標,執行子類物件
void
test()
2、對比普通實現和多型實現(使用具體例程)
普通:
class
calculator
calculator
(int num1, int num2)
int getnum1()
int getnum2()
//重點函式
int work
(char op)
else
if(op ==
'-')
else
if(op ==
'*')
return0;
}private
: int m_num1;
int m_num2;};
void
test()
多型:
class
basecalculator
basecalculator
(int num1, int num2)
int getnum1()
int getnum2()
//重點函式,將其寫成虛函式
virtual int work()
private
: int m_num1;
int m_num2;};
class
addcalculator
:public basecalculator};
class
subcalculator
:public basecalculator};
class
mulcalculator
:public basecalculator};
void
test()
4、多型條件1、有繼承
2、子類重寫父類中的虛函式(返回值,名稱,引數列表完全相同)
3、父類指標或引用執行物件
5、多型底層實現
1、vfptr——虛函式指標
2、vftable——虛函式表
3、子類重寫虛函式時,子類中vftable內部會被全部替換成子類的虛函式位址
4、呼叫虛函式時走的虛函式表,從誰呼叫就會呼叫誰
6、純虛函式
1、擁有純虛函式的類成為抽象類
2、抽象類不能例項化
3、子類必須重寫純虛函式,否則也是抽象類,不能例項化
4、形式
virtual void
func()=0;
7、虛析構、純虛析構1、先看乙個有問題的**
class
base
~base()
};class
son:
public base
~son()
} string *name;};
void
test()
看結果,缺少son的析構:
2、son沒有析構,原因就是因為父類指標析構,子類沒有呼叫。
解決方法,將父類析構寫為虛函式
virtual ~
base()
3、純虛析構
virtual ~
base()=0;
純虛析構宣告也要實現(類外實現)
base::~
base()
重新學習C 之 變數
1 變數宣告語法 datatype identifier eg int i 該語句宣告了int變數i。如果在表示式中直接使用此變數會報錯,除非對該變數進行初始化。2 宣告變數的方法 1 int i i 1 先宣告,在賦值 初始化 2 int x 0 宣告並初始化他的值。3 int x 0,y 0 在...
鍊錶的重新學習
兩種方法 頭插法 每一次插入的資料永遠在第乙個位置。生成的次序和輸入的次序相反 p next head next head next p 尾插法 與輸入的次序相同r head r next null 在最後將尾節點的指標域為空鍊錶的銷毀 p head next while p p不為空時 head ...
突如其來的C重新學習
從今天開始重新學習c 大概複習一下 基本的幾種視窗模式 控制台程式 console.writeline 程式設計 console.read 關於 結構的問題 namespace 命名空間 class 類 static 靜態 main 靜態方法 命名空間可以區別相同名稱的類 呼叫命名空間中的類的方法 ...