虛函式測試1

2021-08-07 05:08:48 字數 1345 閱讀 2763

//多型測試  

#include

#include

#include

using

namespace

std;

//基類a

class a

virtual ~a()

virtual

void fn()

void fn2(void)

};

//派生類b,公有繼承自基類a

class b:public a

virtual ~b()

virtual

void fn()

void fn2(void)

};

//多層派生

//派生類c,公有繼承自基類b,而基類b,公有繼承自基類a

class c :public b

virtual ~c()

virtual

void fn()

void fn2()

};

//main函式

int main()

b *pb = static_cast

(pa);

//將基類a的指標pa強制轉換為派生類b的指標pb(下行轉換必須顯示宣告)

//還記得嗎?(上行轉換的效果;類似於多型。但,下行轉換,效果正好相反!)

if (pb != null) //條件滿足,故執行:

c *pc = static_cast

(pa);

//將基類a的指標pa強制轉換為派生類c的指標pc(下行轉換必須顯示宣告)

if (pc != null) //條件滿足,故執行:

delete pa; //由於是基類a是虛析構函式,故牽扯到物件的完全釋放:

//先執行b的析構函式輸出(b deconstructef.),再執行a的析構函式輸出(a deconstructef.)。

system("pause");

return

0;

} /*

a constructed.

b constructed.

b fn called

a fn222 called

b fn called.

b fn222 called

b fn called.

c fn222 called

b deconstructef.

a deconstructef.

*/

C 虛函式和純虛函式(1)

學習過c 類的繼承與多型的時候,但是很多的童鞋回過頭來都忘記之中關於虛函式和純虛函式的細節,甚至將他們混淆。虛函式是動態多型性的基礎,其呼叫的方式是動態聯編 又稱晚期聯編,簡單解釋為只有在程式執行時才決定呼叫基類的還是子類的,系統會根據基類指標所指向的物件來決定要呼叫的函式 非虛函式與其相反,是靜態...

C 虛函式和純虛函式(1)

寫在前面的 學習過c 類的繼承與多型的時候,但是很多的童鞋回過頭來都忘記之中關於虛函式和純虛函式的細節,甚至將他們混淆。虛函式是動態多型性的基礎,其呼叫的方式是動態聯編 又稱晚期聯編,簡單解釋為只有在程式執行時才決定呼叫基類的還是子類的,系統會根據基類指標所指向的物件來決定要呼叫的函式 非虛函式與其...

C 虛函式表(1)

2010 10 27 今天了解了一下c 的虛函式表,發現乙個問題,那就是虛函式表的位址到底是什麼?指向虛函式表v table的指標一般是存放在類物件的記憶體空間中的前四個位元組,那麼取得這個指標值也就是可以取得對虛函式表的控制 參考一些 注視部分為自己所想 說說自己的理解 b 取物件位址,int b...