1. 程式人生 > >C++類與對象(2)——類的組合

C++類與對象(2)——類的組合

hang 執行 .get 自動 賦值 rec 自定義類 類的定義 對象

當我們創建一個類時,我們總是習慣用C++的基本數據類型作為類的組成部件。但實際上類的成員數據既可以是基本類型也可以是自定義類型,當然也可以是類的對象。這就是類的組合,它描述的就是一個類內嵌其他類的對象作為成員的情況,它們之間的關系是一種包含於被包含的關系。

當創建類的對象時,如果這個類具有內嵌對象成員,那麽各個內嵌對象將首先被自動創建,

組合構造函數定義的一般形式:

類名::類名(形參表):內嵌對象1(形參表),內前對象2(形參表)......

{類的初始化}

其中“內嵌對象1(形參表),內前對象2(形參表)......”稱為初始化列表,其作用是對內嵌對象進行初始化。

例如

//創建Point類
class Point { public: Point(float xx,float yy) { x = xx; y = yy; } int getX() { return x; } int getY() { return y; } private: float x, y; }; //創建Rectangle類, class Rectangle { public: //構造函數,將傳入的形參xp1賦值給p1,xp2賦值給p2 Rectangle(Point xp1,Point xp2):p1(xp1),p2(xp2){ }
void ZC() { float Chang; Chang = abs((p1.getX() - p2.getX()) + (p1.getY() - p2.getY())) * 2; cout << "The ZHOUCHANG of the rectangle is :" << Chang << endl; } void Area() { float Ar; Ar = abs(p1.getX() - p2.getX())*abs(p1.getY() - p2.getY()); cout
<< "The Area of the rectangle is :" << Ar << endl; } private: Point p1, p2; };

在創建一個組合類對象時, 不僅它自身的構造函數的函數體將被執行,而且還將調用其內嵌對象的構造函數,調用順序如下:

(1)調用內嵌對象的構造函數,調用順序按照內嵌對象在組合類的定義中出現的次序,註意:內前對象在構造函數的初始化列表中出現的順序與內嵌對象構造函數的調用順序無關。

(2)執行本類構造函數的函數體。

C++類與對象(2)——類的組合