C 中的成員物件(學習筆記)

2021-06-13 02:04:29 字數 1761 閱讀 5545

【概念】

成員物件:當乙個類的成員是另乙個類的物件時,這個物件就叫成員物件。概括的說,就是乙個類的成員是乙個物件,即成員物件。

例如:#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 ...