虛函式使用

2021-04-29 15:35:00 字數 1218 閱讀 5997

1、虛函式的使用方法 【

1】在基類用

virtual

宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。 【

2】在派生類中重新定義此函式,要求函式名、函式(返回)型別、函式引數個數和型別與基函式的虛函式相同。如果在派生類中沒有對基類的虛函式重定義,則派生類簡單地繼承直接基類的虛函式。

有一種情況例外,在這種情況下派生類與基類的成員函式返回型別不同,但仍起到虛函式的作用。即基類虛函式返回乙個基類指標或基類引用,而子類的虛函式返回乙個子類的指標或子類的引用。

class

base

};

class

derived:public base

};

void

test(base &x)

intmain()

結果:

base's fun().

derived's fun().

【3】c++

規定,當乙個成員函式被宣告為虛函式後,其派生類中的同名函式(符合

2中定義的函式)都自動成為虛函式。 【

4】定義乙個指向基類物件的指標變數,並使其指向同一類族中的某個物件。通過該指標變數呼叫此函式,此時呼叫的就是指標變數指向的物件的同名函式。

1.3宣告虛函式的限制【1

】只能用

virtual

宣告類的成員函式,使它成為虛函式,而不能將類外的普通函式宣告為虛函式。 【

2】乙個成員函式被宣告為虛函式後,在同一類族中的類就不能再定義乙個非

virtual

的但與該虛函式具有相同引數(個數與型別)和函式返回值型別的同名函式。 【

3】靜態成員函式不能是虛函式,因為靜態成員函式不受限於某個物件。 【

4】inline

函式不能是虛函式,因為

inline

函式是不能在執行中動態確定其位置的。即使虛函式在類的內部定義,編譯時,仍將其視為非

inline的。

【5】使用虛函式,系統要有一定的空間開銷。當乙個類帶有虛函式時,編譯器會為該類構造乙個虛函式表

(virtual function tanle,vtable)

,它是乙個指標陣列,存放每個虛函式的入口位址。

以上**:

2、虛函式有預設形參問題

虛指標,虛函式,虛函式表,純虛函式

虛指標 虛繼承 在使用多重繼承時,如存在 class a 有m a變數 class a1 virtual public a,m a1 class a2 virtual public a m a2 class b public a1,public a2 m b 時 存在以下記憶體儲存順序 虛指標 指向...

C 虛函式和虛析構函式的使用

main.cpp c test12 include using namespace std class a a virtual a void funa void funb virtual void funb void a funa void a funb class b public a b voi...

C 虛函式的使用

這兩天看了c 虛函式的相關機制,有必要記錄下自己的心得體會。c 的虛函式機制主要依賴c 的指標和引用的靜態型別 編譯時確定的型別 和動態型別 執行時確定的型別 的不同來實現動態繫結的,也就是在執行時來確定基類指標和引用的型別,是本身基類型別還是其某個子類型別。這樣,就可以在動態時確定通過指標或者引用...