組合關係中的建構函式和析構函式的呼叫順序
組合關係中呼叫成員的帶引數的建構函式
之前的章節我們介紹了單個類有關的知識。在程式中如果出現多個類,那麼它們之間會表現出一定的關係。粗略的看,類之間有以下幾種關係:
使用關係是比較弱的關係,就是說a類使用了b類的功能(方法),在**層面,a類可能以如下方式使用了b類:
在uml即軟體開發建模語言領域,使用關係被稱為依賴(dependency)關係,其uml類圖表示為:
表示a類使用了b類,注意連線是虛線。
在類之間的uml圖中,有時因為依賴關係是比較弱的關係,可能就不會表示出來了(繪製虛線)。(???待確認)
使用關係是兩個類之間的臨時關係。上述例子中只有a類物件呼叫了method1
或者method2
方法,才會用到b類。
這就區別於類之間另一種「更強」的關係,組合關係。
組合關係指a類的乙個成員是b類的物件,換句話說,a類物件的某乙個屬性儲存在b類物件中。組合關係也可以稱為包含關係。
**層面
在uml中,組合關係被稱為關聯(association)關係,其uml類圖表示為:class a
;
表示a1類的乙個成員是b1類的。注意連線是實線。
相比於使用關係,組合關係是長期的關係。a類的乙個成員是b類的,因此a類物件包含了乙個b類物件。所以這種關係稱為「組合」,組合關係也被形象地稱為「有乙個(has a)」關係。
聚合關係類似於組合關係,只是包含的含義更加深刻,在此不加介紹。我們目前只需要了解到組合的含義就可以了。
human類的例子
understanding uml class relationships#include
#include
class human
private:
string name;
...};
a類含有b類成員,那麼在構造a類物件的時候也會構造成員之一的b類物件。
class b
~b()
private:
int x;
};class a
~a()
private:
b b; // a含有b類成員b
上述**在main函式中將物件a建立在一對大括號中是因為大括號在程式中是乙個作用域的標誌,進入和退出這個區域,它裡面的物件就會被建立和銷毀,因此我們能及時地看到a的析構函式的呼叫。
可見,程式會先呼叫成員b的建構函式,然後再呼叫a類的建構函式,遵循先部分,後整體的建立順序。物件銷毀是,析構函式執行順序相反,先呼叫a類的析構函式,再呼叫成員b的析構函式,先整體,後部分。
class b
private:
int x;
};
類b有乙個帶引數的建構函式。那麼建立b類物件b時,需要這樣b b(5);
,這樣才會呼叫該建構函式。
此時,如果a類成員b是b類型別的,那麼怎樣在a類的建構函式中初始化b呢?
在a類的建構函式中使用成員初始化列表來呼叫b類的帶引數的建構函式。
class b
private:
int x;
};class a
private:
b b;
// ...
};int main()
建構函式的成員初始化列表是初始化類的成員的地方,可在那裡指定呼叫成員的「某款」建構函式。
如果b類存在不帶引數的建構函式,即預設建構函式,那麼可以不使用成員初始化列表來初始化b。此時,建立成員b呼叫的就是b類預設建構函式,就像在「呼叫順序」中的例子展示的那樣。
注意,如果b類只含有帶引數的建構函式,而沒有預設建構函式,那麼在a類的建構函式中一定要使用成員初始化列表來初始化b。
date類只有乙個帶引數的建構函式
class
date
intyear, month, day;
};
那麼包含它的類需要在建構函式中使用成員初始化列表來初始化它。
class human
date birthday;
string name;
...};
類和類之間的關係
在uml中,類和類之間有實現 介面 繼承等等。下面重點講下下面四個的區別 一般來講,關聯是指一種一對一的關係。注意,在關聯中,關聯物件擁有被關聯類 以箭頭指向來說 水平的引用 class asset class player set the asset via constructor or a se...
類之間的關係 關聯 組合 聚合 依賴關係比較
1 種類 generalization 泛化 dependency 依賴關係 association 關聯關係 aggregation 聚合關係 composition 合成關係 2 其中aggregation 聚合關係 composition 合成關係 屬於 association 關聯關係 是特...
類之間的關係
類之間的關係 內容 網上關於此類的討論非常多,發現對於該問題的理解各有各的說法,而各個說法中又相去甚遠。通過瀏覽這些討論以及對 的參考,發表一下自己的看法.類間關係有很多種,在大的類別上可以分為兩種 縱向關係 橫向關係。縱向關係就是繼承關係,它的概念非常明確,也成為oo的三個重要特徵之一,這裡不過多...