繼承體系下派生類的物件模型

2021-08-21 04:31:16 字數 1163 閱讀 8613

首先什麼是物件模型呢,物件模型就是物件中非靜態成員變數在記憶體中的布局

1.下面我們就從最簡單的單繼承開始研究,

什麼是單繼承呢,簡單地說就是乙個派生類只有乙個父類

碼出如下**

#include using namespace   std;

class base //基類

;class derived :public base //繼承

;int main()

;class base2 //基類

;class derived :public base1,public base2 //繼承

;int main()

;class c1: public b

;class c2 : public b

;class d : public c1, public c2

;int main()

{ d d;

d._b=1;

d._c1=2;

d._c2=3;

d._d=4;

cout<

c1++.cpp:27: error: request for member 『_b』 is ambiguous

c1++.cpp:6: error: candidates are: int b::_b

c1++.cpp:6: error: int b::_b

編譯器不可以確定是哪乙個,下面我將對**進行修改(在主函式中)

int main()

{ d d;

d.c1::_b=1;

d.c2::_b=2;

d._c1=3;

d._c2=4;

d._d=5;

cout<

[root@localhost c++]# ./a.out13

2454

8820

由此我們可以看出d的物件模型

大小為20個位元組

基類的成員變數在派生類中存了兩份

派生類物件模型之多繼承派生類物件模型

c 是支援多繼承的,那麼多繼承關係中派生類物件模型和單繼承關係中有什麼不一樣呢?我們來看一看。首先給出乙個多繼承關係 class base1 int b1 class base2 int b2 class derive public base1,public base2 int d 類base1有乙...

派生類物件模型之菱形繼承派生類物件模型

當繼承關係超過兩重後,就不可避免地出現菱形繼承的問題,什麼是菱形繼承呢?我們來看乙個圖 像這樣,類b1 b2繼承自類a,而類c又與類b1 b2是多繼承的關係,整個繼承關係呈菱形,這就是菱形繼承。那麼菱形繼承存在什麼問題呢?先給出這樣乙個繼承關係 class a int a class base1 p...

C 派生類物件模型

include using namespace std class base virtual base int get const private int num class base1 virtual base1 private int helthy class base2 virtual bas...