C 類開始的重新學習記錄3

2021-10-04 06:31:30 字數 2486 閱讀 1277

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 靜態方法 命名空間可以區別相同名稱的類 呼叫命名空間中的類的方法 ...