二、資料成員指標
本文主要以示例說明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 ...