【c++基礎】菱形繼承問題

機械吳哥123發表於2020-12-08

先上程式碼:

#include <iostream>

using namespace std;

//動物類
class animmal {
public:
	int age;
	double price;
	string name;
};
//羊類
class yang : virtual public animmal{
public:
	int weight;
};
//駝類
class tuo : virtual public animmal {
public:
	int weight;
	int weight1;
};
//羊駝類
class yangtuo :public yang, public tuo {

};
int main() {
	yangtuo yt;

	return 0;
}

開啟vs的Developer Command Prompt for VS 2019

在這裡插入圖片描述

按照以下步驟輸入

1、首先進入到專案的工程資料夾下,我存放的是E盤,所以輸入 E:
2、然後 cd 到具體的專案資料夾下;
3、然後輸入
cl /d1 reportSingleClassLayoutyangtuo 源.cpp
此處注意:report小寫,後面的單詞首字母大寫
yangtuo是類的名稱,你的類叫什麼就改成什麼,後面的源.cpp是項的名稱。

如果還有不懂的看下面的原始碼:

原始碼分析

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.7.6
** Copyright (c) 2020 Microsoft Corporation
**********************************************************************

D:\Program Files (x86)\Microsoft Visual Studio\2019\Community>
D:\Program Files (x86)\Microsoft Visual Studio\2019\Community>e;
'e' 不是內部或外部命令,也不是可執行的程式
或批處理檔案。

D:\Program Files (x86)\Microsoft Visual Studio\2019\Community>e:

E:\>cd E:\algorithm\diamod_inherit

E:\algorithm\diamod_inherit>cl /d1 reportSingleClassLayoutyangtuo 源.cpp
用於 x86 的 Microsoft (R) C/C++ 優化編譯器 19.27.29112 版
版權所有(C) Microsoft Corporation。保留所有權利。

源.cpp

class yangtuo   size(64):
        +---
 0      | +--- (base class yang)
 0      | | {vbptr}
 4      | | weight
        | +---
 8      | +--- (base class tuo)
 8      | | {vbptr}
12      | | weight
16      | | weight1
        | | <alignment member> (size=4)
        | +---
        | <alignment member> (size=4)
        +---
        +--- (virtual base animmal)
24      | age
        | <alignment member> (size=4)
32      | price
40      | ?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@ name
        +---

yangtuo::$vbtable@yang@:
 0      | 0
 1      | 24 (yangtuod(yang+0)animmal)

yangtuo::$vbtable@tuo@:
 0      | 0
 1      | 16 (yangtuod(tuo+0)animmal)
vbi:       class  offset o.vbptr  o.vbte fVtorDisp
         animmal      24       0       4 0
Microsoft (R) Incremental Linker Version 14.27.29112.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:.exe
源.obj

E:\algorithm\diamod_inherit>

在這裡插入圖片描述

相關文章