C 物件資料成員儲存示例

2021-10-05 17:45:13 字數 2849 閱讀 5588

二、資料成員指標

本文主要以示例說明c++物件資料成員儲存布局,有關理論知識,請參考data語意學。

#include

using

namespace std;

classx;

int x::staticx =42;

classy;

int y::staticy =43;

intmain()

程式執行結果如下:

從上述結果可以看出:非靜態資料成員在類物件中的排列順序將和其被宣告的順序一樣,任何中間介入的靜態資料成員都不會被放進物件布局之中。在上述例子中,x和y物件是由兩個int組成的,順序是a、b。

c++標準要求,在同乙個access section(也就是private、public、protected等區段)中,成員的排列只需符合"較晚出現的成員在類物件中有較高的位址"這一條即可。

c++編譯器也允許編譯器將多個access section之中的資料成員自由排列,不必在乎它們出現在類宣告中的順序。

#include

using

namespace std;

classx;

int x::staticx =42;

classy:

public x

;int y::staticy =43;

intmain()

程式執行結果如下:

從上述結果可以看出:在x中,為了對其記憶體,會填補額外的3個位元組。在y中,首先存放的是x的子物件的資料成員,然後存放y的資料成員。

x和y的記憶體布局如下:

程式執行結果如下:

從上述結果可以看出:在m中,首先存放的是最左邊的基類(也就是第乙個基類)x的子物件的資料成員,然後存放y的資料成員,最後存放m的資料成員。

m的記憶體布局如下:

程式執行結果如下:

從上述結果可以看出:在y中,首先存放的是虛基類表指標,然後存放y中的資料成員,最後存放虛基類x的資料成員。在z中,首先存放的是虛函式表指標,然後是虛基類表指標,接下來存放z中的資料成員,最後存放虛基類x的資料成員。

x、y、z的記憶體布局如下:

程式執行結果如下:

從上述結果可以看出:在m中,首先存放的是最左邊的基類(即第乙個基類)的子物件,需要注意的是:m中的虛函式位址存放在y的子物件的虛函式表中,接下來依次存放其他基類子物件,然後是m的資料成員,最後存放虛基類x的子物件。

x、y、z、m的記憶體布局如下

C 中靜態資料成員使用示例

include 嘗試靜態資料成員 using namespace std class easy easy easy int a,int b num1 a num2 b ea程式設計客棧sy easy const easy m void easy output 建立了乙個有三個無名物件元素的easy類...

C 物件成員

物件成員 乙個物件中包含其他物件 如 class line 當例項化這樣乙個物件時,會先例項化m coora,再例項化m coorb,最後例項化line 物件消亡時,會先銷毀line,再m coorb,最後m coora 如果座標類有乙個預設建構函式,那麼在例項化線段物件的時候,不使用初始化列表。如...

C 物件成員

上圖 表示一條線的類需要兩個點的物件 實際上線段的例項化應該有引數 y 可以用初始化列表也可以不用 coordiante coordiante void coordiante setx int x int coordiante getx void coordiante sety int y int ...