C 多型與虛函式條件

2021-10-02 17:32:53 字數 1189 閱讀 7490

看下邊**:

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