關於C 中父類指標引用物件在記憶體中的分布

2021-07-05 02:40:42 字數 1254 閱讀 5911

通過程式,這是我自己的理解,如果不對,麻煩幫忙指出來

程式1

#include using namespace std;

class classa

; virtual void functiona(){};

int a;

int b;

};class classb: public classa

; int a;

int b;

};class classc : public classb

;int main()

執行後發現pa=pb=pc;

而如果稍微改下程式

程式2:

#include using namespace std;

class classa

; virtual void functiona(){};

int a;

int b;

};class classb

; int a;

int b;

};class classc : public classa,public classb

;int main()

則有pa=pc, pb-pa=12=4*3;

在程式1中,a是父類,b繼承a,然後c繼承b,在生成的aobject物件時在記憶體中只有乙個虛函式表,而且是在物件記憶體的最開始處,虛函式表中有

~ classa,functiona(),functionb()

三個虛函式,在父類指標引用時均指向該虛函式表,在動態繫結時根據該虛函式表查詢具體的函式。 

而在程式2中,a,b均為父類,然後c分別繼承a和b,在生成aobject物件時記憶體中有兩個虛函式表,第乙個包含子類本身的虛函式以及第乙個父類的虛函式有

~ classa(){},virtual void functiona()
如果c也有虛函式也會在此虛函式表中

所以pa,pc均指向最開始的虛函式表 

而第二個虛函式表中只有父類b的虛函式

virtual void functionb()
而且在兩個虛函式表間還有父類的成員,所以pb-pa=12,中間間隔乙個虛函式表位址4位元組,然後有兩個整型變數4位元組。

關於父類引用指向子類物件

例如 有以下2個類 public class father public class son father father f new son 這種用法叫做 父類引用指向子類物件,或者叫 父類指標指向子類物件 指的是定義乙個父類的引用,而它實際指向的是子類建立的物件。好處是什麼?下面做幾個測試,第一種...

關於父類引用指向子類物件

很多人在初次接觸設計模式的時候,最大的疑惑莫過於碰到這樣的句子 父類animal和子類dog animal a2 new dog 這是什麼玩意兒?究竟有什麼用途,我直接用子類物件不就完了?我們就來解釋一下 這是什麼玩意兒?re 這種用法叫做 父類引用指向子類物件 跟繞口令似的 或者叫 父類指標指向子...

關於父類引用指向子類物件

父類的引用指向子類的物件 當子類繼承的父類時子類會繼承父類的屬性以及方法,當用父類去接收子類物件時 1.如果子類中含有與父類同名屬性時,雖然物件中存在子類中的資料,但是無法去呼叫,可以通過在子類中重寫get,set方法去獲取資料。2.如果子類中沒有重寫父類的方法時,無法用物件去呼叫子類的屬性以及方法...