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 的指標和引用的靜態型別 編譯時確定的型別 和動態型別 執行時確定的型別 的不同來實現動態繫結的,也就是在執行時來確定基類指標和引用的型別,是本身基類型別還是其某個子類型別。這樣,就可以在動態時確定通過指標或者引用...