所謂物件成員指標就是讓乙個類的物件的指標作為另外乙個類的成員變數,物件成員就是讓乙個類的物件成為另乙個類的成員變數。下面以**舉例說明:
公用座標類:
class coordinate
(1)物件成員**如下:
class line ;
(2)物件成員指標**如下:
class line
初始化有兩種方式:
1)line::line():m_pcoora(null), m_pcoorb(null)
2)line::line()
經常使用如下的方式進行初始化和銷毀
line::line()
line::~line()
(3)物件成員和物件成員指標的區別:
int main()
在32位編譯器中:
如果是物件成員的話,sizeof()得到的應該是line裡面的所有物件的記憶體體積總和,8+8 = 16;
如果是物件成員指標的話,sizeof()得到的只是兩個指標的大小總和:4+4 = 8;
原因如下所示,指標所指向的物件並不在line這個物件的記憶體單元當中,而在堆記憶體當中,當銷毀的時候,也應該先釋放堆中記憶體,再釋放line物件本身的記憶體。
注: 指標占用的記憶體空間大小與指標指向的內容和內容的大小無關。
在不同的作業系統及編譯環境中,指標型別占用的位元組數是不同的。一般而言,
編譯生成16位的**時,指標佔2個位元組
編譯生成32位的**時,指標佔4個位元組
編譯生成64位的**時,指標佔8個位元組
對於某乙個具體的環境,可以用下面的語句精確的知道指標型別占用的位元組數:
printf("%d\n", sizeof(int *));
另外,int型占用4位元組。
C 學習之物件成員篇
物件成員特點總結 1 例項化物件a時,如果物件a有物件成員b,那麼先執行物件b的建構函式,再執行a的建構函式。2 如果物件a中有物件成員b,那麼銷毀物件a時,先執行物件a的析構函式,再執行b的析構函式。3 如果物件a中有物件成員b,物件b沒有預設建構函式,那麼物件a必須在初始化列表中初始化物件b 原...
C 之常物件,常成員物件,常成員函式,常指標
一 常物件 time const t1 12,23,23 其中所有的值不能被修改。通過該物件只能呼叫它的常成員函式,而不能呼叫它的普通成員函式。以防普通成員函式會修改資料成員的值。但如果一定要修改常物件資料成員的值,可以將該資料成員宣告為mutable,如 mutable int count 把co...
C 之this指標和const物件 成員函式
class a class b a a b b a.foo b a叫做呼叫物件,b叫做引數物件 一般而言,關鍵字this就是乙個指標,對於一般成員函式來說,該指標用於指向呼叫物件的位址,而對於建構函式來說該指標指向正在被構造的物件的位址 1 this 指標可以用於在建構函式中區分與形參名相同的成員變...