【概念】
成員物件:當乙個類的成員是另乙個類的物件時,這個物件就叫成員物件。概括的說,就是乙個類的成員是乙個物件,即成員物件。
例如:#include
using namespace std;
class date; //建立乙個物件date,類體略
class time
; //建立乙個物件time,該物件有兩個資料成員d1和d2,這兩個成員是date類的兩個物件
在這個例子中,time的成員d1和d2是date的物件,那麼d1和d2就是成員物件。
【要求】
1、出現成員物件時,該類的建構函式要包含對成員的初始化。如果建構函式的成員初始化列表沒有對成員物件初始化時,則使用成員物件的預設建構函式。
如上例中的time中,有兩個成員物件d1和d2,那麼在time類的建構函式中,就應該包含對d1和d2的初始化,這個初始化通常採用成員初始化列表的方式進行。
建構函式對成員物件初始化列表的格式為:
《類名》::《類名》(《總參數列》):《成員物件1>(《形參表1>), 《成員物件2>(《形參表2>),……
如上例的time類的建構函式可以這樣定義:
::(int m):d1(m),d2(5); //如果在類體內定義,則省略::
該例中d1被初始化為d1(m),d2被初始化為d2(5).
再如:::(int m):d1(m) //如果在類體內定義,則省略::
該例中d1被初始化為d1(m),d2未被初始化.
2、建立乙個類的物件時,應先呼叫其建構函式。但是如果這個類有成員物件,則要先執行成員物件自己所屬類的建構函式,當全部成員物件都執行了自身類的建構函式後,再執行當前類的建構函式。
如上例修改如下:
#include
using namespace std;
class date;
void main( )
{time t1, t2(6); //注釋1
cout<<"the end"<
注釋1:
主程式執行到time t1 , t2時,會檢查time類中是否有成員物件,檢查中根據date d1 , d2; 發現有成員物件d1和d2,就先執行d1和d2對應的date類中的建構函式,然後再執行time中的建構函式。
具體步驟為:
(一)在建立t1物件(無引數)時,按下列步驟進行:
1、執行d1所屬類date的建構函式,因為d1在time中未初始化,故在過載時呼叫預設建構函式,輸出 this is date;
2、執行d2所屬類date的建構函式,因為d1在time中未初始化,故在過載時呼叫預設建構函式,輸出 this is date;
3、執行t1所屬類time的建構函式,因為d1在time中未初始化,故在過載時呼叫預設建構函式,輸出 this is time;
(二)在建立t2物件(有引數)時,按下列步驟進行:
4、執行d1所屬類date的建構函式,因為d1在time中未初始化,故在過載時呼叫預設建構函式,輸出 this is date.
5、執行d2所屬類date的建構函式,根據time中 time(int a):d2(a); 發現d2已經被初始化為d2(a),在這裡即為d2(6),由此則需要呼叫date類的建構函式date(int a),輸出 the value= .
6、執行t2所屬類time的建構函式,t2的過載函式應為time(int a),輸出 hello.
C 學習之物件成員篇
物件成員特點總結 1 例項化物件a時,如果物件a有物件成員b,那麼先執行物件b的建構函式,再執行a的建構函式。2 如果物件a中有物件成員b,那麼銷毀物件a時,先執行物件a的析構函式,再執行b的析構函式。3 如果物件a中有物件成員b,物件b沒有預設建構函式,那麼物件a必須在初始化列表中初始化物件b 原...
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 ...