有如下程式:
//-----------------
class a
virtual ~a()
public:
virtual void virtualfunc()
; void func()
void f1()
protected:
private:
}; class b : public a
~b()
public:
virtual void virtualfunc()
; void func()
void g1()
protected:
private:
}; 在這兩個類中,子類b 重寫了 基類的 兩個函式,乙個是虛函式,乙個不是虛函式。
1. 如果main函式如下:
int main(int argc, int* argv)
執行結果如下:
base a
derive b
derive virtualfunc
base func
derive ~b
base ~a
也就是說,如果子類重寫了基類的虛函式,那麼該指標(基類指標,但指向派生類物件)將呼叫子類的函式;
即使子類重寫了基類的非虛函式,該指標也不會呼叫子類的函式。
該指標(基類指標,但指向派生類物件) 也不能呼叫子類自有的虛函式和非虛函式。
2.如果main 函式如下:
int main(int argc, int* argv)
則執行結果如下:
base a
derive b
derive virtualfunc
derive func
derive ~b
base ~a
即如果用子類指標指向子類物件,則都呼叫子類的函式。
C 多型,虛函式
在c 中可以用基類指標指向其派生類,如果乙個派生類繼承多個父類,那麼如何通過基類指標訪問同名的成員呢?如果基類a,基類b中都有函式fun 派生類在同時繼承a b後在記憶體中根據繼承的順序分配記憶體,例如在繼承列表中出現的是b,a,那麼b中的成員在a的之前,當我們用b的指標去訪問時候,編譯器便將指標指...
C 虛函式多型
由虛函式實現的動態多型性就是 同一類族中不同類的物件,對同一函式呼叫作出不同的響應。虛函式的使用方法是 1 在基類用virtual宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。在類外定義虛函式時,不必再加virtual。2 在派生類中重新定義此函式,要...
C 多型,虛函式
多型是指使用相同的函式名來訪問函式不同的實現方法,即 一種介面,多種方法 用相同的形式訪問一組通用的運算,每個運算可能對應的行為不同。c 支援編譯時多型和執行時多型,運算子過載和函式過載就是編譯時多型,而派生類和虛函式實現執行時多型。執行時多型的基礎是基類指標,基類指標可以指向任何派生類物件。2.虛...