看下邊**:
#includeclass base
void show()
protected:
int ma;
};class derive :public base
void show()
protected:
int mb;
};int main()
執行結果:
基類指標指向派生類物件
指向的是派生類物件中基類的起始部分
派生類物件布局:
動多型的發生:
動多型的處理流程:
基類指標找派生類中虛函式指標,然後派生類中的虛函式指標解引用到派生類虛表中的派生類函式
所以在基類方法中加上virtual關鍵字時,基類中增加了虛函式,也就存在了虛表,用虛函式指標訪問虛表所以多了4個位元組,派生類中多四個位元組是因為派生類中也存在虛函式show(),同理會增加四個位元組的空間,pb為指標型別,內建型別只和定義點相關,所以無論何時都是base*型別,對pb進行解引用為派生類的虛函式表,表中放的是派生類物件的型別資訊,所以列印結果為class derive,同時也呼叫派生類的方法derive::show();
那些函式可以成為虛函式:
1,建構函式 f
2,析構函式 t
3,inline函式 f
4,static修飾函式 thiscall ->cdcall f
5,全域性函式 f
6,普通類成員方法 t
所以只有析構函式和普通類成員方法可以成為虛函式,其他的都不可以。
C 虛函式與多型
1.1 虛函式概念 1.定義 在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。即就是類外面不能使用virtual關鍵字 1.2 純虛函式與抽象類 1.純虛函式 在虛函式的後面加上 0 virtual void disp...
c 多型與虛函式
多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。下面的例項中,基類 shape 被派生為兩個類,如下所示 include using namespace std class sha...
C 多型與虛函式
這一篇介紹一下 c 物件導向三大特徵之一的多型 之前面試某大廠的實習生被問到多型,後來又了解到一些設計模式,才體會到多型的強大,在這裡把對多型的一點點淺顯認識總結一下 虛表 class test cout sizeof test endl test p new test p vfunc 將類指標p強...