類之間的關係(1 使用關係和組合關係)

2021-07-30 00:11:46 字數 2316 閱讀 9399

組合關係中的建構函式和析構函式的呼叫順序

組合關係中呼叫成員的帶引數的建構函式

之前的章節我們介紹了單個類有關的知識。在程式中如果出現多個類,那麼它們之間會表現出一定的關係。粗略的看,類之間有以下幾種關係:

使用關係是比較弱的關係,就是說a類使用了b類的功能(方法),在**層面,a類可能以如下方式使用了b類:

在uml即軟體開發建模語言領域,使用關係被稱為依賴(dependency)關係,其uml類圖表示為:

表示a類使用了b類,注意連線是虛線。

在類之間的uml圖中,有時因為依賴關係是比較弱的關係,可能就不會表示出來了(繪製虛線)。(???待確認)

使用關係是兩個類之間的臨時關係。上述例子中只有a類物件呼叫了method1或者method2方法,才會用到b類。

這就區別於類之間另一種「更強」的關係,組合關係。

組合關係指a類的乙個成員是b類的物件,換句話說,a類物件的某乙個屬性儲存在b類物件中。組合關係也可以稱為包含關係。

**層面

class a

;

在uml中,組合關係被稱為關聯(association)關係,其uml類圖表示為:

表示a1類的乙個成員是b1類的。注意連線是實線。

相比於使用關係,組合關係是長期的關係。a類的乙個成員是b類的,因此a類物件包含了乙個b類物件。所以這種關係稱為「組合」,組合關係也被形象地稱為「有乙個(has a)」關係。

聚合關係類似於組合關係,只是包含的含義更加深刻,在此不加介紹。我們目前只需要了解到組合的含義就可以了。

human類的例子

#include 

#include

class human

private:

string name;

...};

understanding uml class relationships

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的三個重要特徵之一,這裡不過多...