在類中定義的資料成員一般都是基本資料型別或服復合資料型別。但是還可以根據需要使用
其他類的物件作為正在宣告的資料成員。複雜的物件還可以有比較簡單的物件一某種方式組合
而成,複雜物件和組成它的簡單物件之間的關係是組合關係。
在乙個類中內嵌另乙個類的物件作為資料成員,稱為類的組合。該內嵌物件稱為物件成員,也稱為
子物件。例如:
class a
; class b
;當建立類的物件時,如果這個類具有內嵌物件成員,那麼內嵌物件成員也將被自動建立,因此,
在建立物件時既要對本類的基本資料成員初始化,又要對內嵌的物件成員進行初始化。含有物件
成員的類,其建構函式和不含物件成員的建構函式有所不同,例如有以下的類x:
class x;
一般來說,類x的建構函式的定義形式為:
x::x(形參表0):物件成員1(形參表1),物件成員2(形參表2),物件成員3(形參表3),....
其中,"物件成員1(形參表1),物件成員2(形參表2),物件成員3(形參表3),...."稱作初始化表,其作用
是對物件成員進行初始化。
當呼叫建構函式x::x()時,首先按各內嵌物件成員在類宣告中的順序依次呼叫他們的建構函式,對這些
物件初始化。最後在執行類x的建構函式體,初始化類x的其他成員。析構函式的呼叫順序與建構函式的
呼叫順序相反。
例: 物件成員的初始化
#includeusingnamespace
std;
class a
void
show()
private
:
intx;
float
y;
}; class b
void
show()
private
: a a;
//類a的物件a為類b的物件成員
intz;
};int
main()
需求:定義學生類和成績類,將student類的成員score作為成績類的乙個物件 ,然後用初始化
列表進行初始化。
例 :物件成員的應用
#include#includeusing
namespace
std;
class score;
score::score(
float m,float l,float e) //
定義建構函式
void
score::show()
class student;
student::student(
char* n,char* s,float m,float l,float e):sco(m,l,e) //
定義建構函式
student::~student()
void
student::show()
intmain()
從上面的程式可以看出,類student的show函式中對於物件成員sco的處理方式就是通過呼叫類score的show函式
來實現的。
說明:1、宣告含有物件的類,首先要建立物件成員。本例在宣告類studet中,定義了物件成員sco;
score sco;
2、在定義類student的物件,呼叫建構函式進行初始化的同時,也要對物件成員進行初始化,因為它
屬於此類的成員。因此在寫類student的建構函式時,也綴上了物件成員sco要呼叫類score的構造
函式。student::student(char* n,char* s,float m,float l,float e):sco(m,l,e){}
這時建構函式的呼叫順序是:先呼叫物件成員sco的建構函式,對物件成員的資料成員進行初始化。
隨後再執行類student的建構函式的函式體,對派生類資料成員進行初始化。
注意:在定義類student的建構函式時,必須綴上物件成員的名字sco,而不能綴上類名。。。
C 類的組合
c 中類的組合 c 中,乙個類包含另乙個類,它的建構函式的執行順序可以說是難點也是重點,最近抽空學習了下,總結如下 先拿何潔月教授上課的例子說明 class point 函式的實現 class distance 類宣告 函式的實現 類組合的建構函式設計 原則 不僅要對本類中的基本型別成員資料賦初值,...
C 類的組合
1 組合 乙個大類中包含很多子類 class funa class funb class fun 2 組合類的建構函式 當給乙個組合類傳引數時,同時要給子類傳參。關鍵要理解為什麼這麼做?一般情況下,資料成員會定義為類的私有成員,那麼函式成員需要用到本類的私有成員,實現某些功能,外部無法改變,那麼就需...
C 學習筆記20 類的組合
定義 乙個類內嵌其他類的物件作為成員的情況,他們之間的關係是一種包含與被包含的關係。組合類的建構函式設計 當建立類的物件時,如果這個類具有內嵌物件成員,那麼各個內嵌函式物件將首先被自動建立。在建立物件時既要對本類的基本型別資料成員進行初始化,又要對內嵌物件進行初始化。類名 類名 形參表 內嵌物件1 ...