C 多繼承時的物件記憶體模型(附 檢視方法)

2021-10-23 07:00:05 字數 1417 閱讀 1261

a、b 是基類,c 是派生類

**如下:

#define _crt_secure_no_warnings

#includeusing namespace std;

//class c同時繼承了class a 和class b 建構函式c初始化只能借助建構函式a和建構函式b

//命名衝突 show()函式在每個類裡面都有 會在繼承時形成遮蔽,

//如果要呼叫基類中的函式 必須顯式的呼叫(指明函式的呼叫作用域)

class a

~a()

public:

void show();

protected:

int m_a;

int m_b;

};void a::show()

class b

~b()

public:

void show();

protected:

int m_c;

int m_d;

};void b::show()

class c :public a, public b

~c()

public:

void show();

protected:

int m_e;

};void c::show()

void test01()

int main()

執行結果:

a's construtor

b's construtor

c's construtor

1 2 3 4 5

1 2

3 4

c's destrutor

b's destrutor

a's destrutor

class c 的記憶體模型如下:

檢視記憶體結構方法:

1、開啟vs自帶的開發人員命令列工具

2、轉到儲存專案的 e:盤,cd到*.cpp檔案所在目錄,輸入如下命令

其中 結尾處的c為 class 類名  test.cpp是c++原始檔

感興趣的小夥伴可以檢視

C 物件模型(中)多繼承

例如下面 class b virtual void func 2 虛函式 protected int b class c virtual void func 3 虛函式 protected int c class d public b public c virtual void func 4 der...

C 物件模型5 多繼承下的物件模型

從單繼承可以知道,派生類中只是擴充了基類的虛函式表。如果是多繼承的話,又是如何擴充的?1 每個基類都有自己的虛表。2 子類的成員函式被放到了第乙個基類的表中。3 記憶體布局中,其父類布局依次按宣告順序排列。4 每個基類的虛表中的 print 函式都被 overwrite 成了子類的 print 這樣...

C 物件的記憶體布局 多繼承

多繼承中,乙個派生類可以有多個基類.多繼承是c 頗受爭議的乙個語法特性,它就像一把雙刃劍,在提供便利及強大功能的同時,也帶來了一些容易使人產生錯誤的不便.在此主要說明一下多繼承時物件的記憶體分布 1.與單繼承相同,首先建立基類的物件,但要遵循一定的順序,這個順序是由派生類宣告時決定.2.和單繼承也一...