C 中的多型和多型物件模型

2022-08-23 17:03:07 字數 1709 閱讀 5191

所謂多型,也就是說「多種形態」

c++中虛函式就是為了實現多型

虛函式–類的成員函式前面加上virtual關鍵字,則這個函式就是虛函式

多型的形成條件:

1、虛函式的重寫 2、父類的指標或者引用呼叫重寫的虛函式

例如:a*p = & b;

a是乙個父類,b是乙個子類物件

這個時候就是形成了多型。這個時候呼叫函式與型別無關,只與指向的物件有關,指向誰就呼叫誰。

虛函式的重寫:

當子類定義了乙個與父類完全相同的虛函式(返回值,引數同,函式名)時,則稱這個函式重寫

特例:協變 a類虛函式的返回值可定義為a類的指標或引用 b類也是可以定義為b類的。(可以看做是切片型別)

class a

}class b :public a

//在這裡fun函式就構成了重寫,(協變)

}

單繼承:

在這裡要了解一下虛表:就是乙個儲存了虛函式的表

虛函式實現多型的原因就是因為有乙個虛表指標指向虛函式表,這樣就可以通過指標來找到虛函式

//列印虛表的函式

//單繼承,多繼承都會用

//32位平台下,指標是4個位元組,我們只需要把它取出來就能把虛函式的位址列印出來了

typedef

void(*v_func)();//這裡定義乙個函式指標

void printvtable(int vtable)

cout

<

}

單繼承的**:

class base

;class derive:public base

;int main()

單繼承的物件模型如下圖

多繼承

class base1

菱形虛擬繼承物件模型如下圖所示:

在菱形虛擬繼承中:這裡既有虛函式表,又有虛基表,要理解,就需要在編譯**的時候自己看一下記憶體中的具體情況。如圖,可以看出,在菱形虛擬繼承中,把基類的儲存為公有的,這就需要用虛基錶用偏移量找到他。這裡注意虛函式的重寫,因為看的是derive的物件模型,所以在繼承的時候,有的函式進行了重寫。

c 多型 多型物件模型

1.多型 在c 程式設計中,多型性是指具有不同功能的函式可以用同乙個函式名,這樣就可以用乙個函式名呼叫不同內容的函式。在物件導向方法中一般是這樣表述多型性的 向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同的行為 即方法 也就是說,每個物件可以用自己的方式去響應共同的訊息。所謂訊息,就是呼叫...

多型 多型物件模型

1 什麼多型?當使用基類的指標或引用呼叫重寫的虛函式時,指向父類調的就是父類的虛函式,指向子類調的就是子類的虛函式。下面我們來看一段 sizeof aa 的結果為什麼會是8呢?這是因為函式fun1是乙個虛函式,函式內部存在乙個虛表指標。單繼承物件模型 由於編譯器做了一定的優化,子類中自己定義的函式在...

多型 多型物件模型

一 什麼是多型。物件導向語言有三大特點,封裝 繼承 多型。今天就討論一下多型,多型是 當使用基類的指標或引用呼叫重寫的虛函式時,當指向父類呼叫的就是父類的虛函式,當指向子類就是呼叫子類的虛函式。多型 多種形態。多型分為靜態多型和動態多型。實現多型的其中乙個條件必須是要把子類給給父類,要構成is a的...