//多型測試
#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...