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...