虛函式與純虛函式

2022-09-17 13:06:13 字數 1172 閱讀 2436

ifndef bmw_h #define bmw_h

class w ;

虛函式的作用是:在基類和派生類中,若基類和派生類具有相同的函式(返回值型別不構成多型,但引數要相同),無論此時宣告誰的物件(基類或派生類),基類的函式的實現都會覆蓋派生類的實現,這個時候只要將基類,(或基類和派生類同時)宣告為虛函式,可消除此種現象

引入純虛函式的意義:在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理

在許多情況下,在基類

中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類

的派生類

去做。這就是純虛函式的作用。

純虛函式可以讓類先具有乙個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函式的類叫做抽象類

。這種類不能宣告物件,只是作為基類為派生類服務。除非在派生類中完全實現基類中所有的的純虛函式,否則,派生類也變成了抽象類,不能例項化物件。

#include #include "bmw.h"

extern void gg();  // defined in bmw1.c to force a second copy of the

// vtables for bmw to be generated. later eliminated

// by armlink.

void g(bmw *pbmw) //虛函式呼叫規則體現

void h(bmw *pbmw)

//指標賦值之後呼叫規律

bmw bmw;

static char *bw = (char *)&bmw.__b_bw;   // this exploits the implementation

static char *mw = (char *)&bmw.__b_mw;   // and is not portable c++...

static char *pw = (char *)&bmw.__v_w;//指標賦值操作

void mw::g(void) //類似與斷言assert、==

void bw::f(void) //==

void bmw::h(void) //==

void w::k(void) //==

int main()

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...

虛函式與純虛函式

參考 虛函式 比如 virtual void function1 virtual關鍵字修飾的 成員函式 就是虛函式。把基類的成員函式 設為virtual,其 派生類的相應的函式也會自動變為虛函式。指向 基類的指標在操作它的 多型類物件時,會根據不同的類物件,呼叫其相應的函式,這個函式就是虛函式。純虛...

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...