首先什麼是物件模型呢,物件模型就是物件中非靜態成員變數在記憶體中的布局
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...