前記:完成第三周的學習型诚,整個面向?qū)ο蟮母呒壘幊陶n(上)就結(jié)束了客燕。前兩周主要講述類自身的特性:不帶指針的類,和帶指針的類狰贯;讓我認識到了類的構(gòu)成要點也搓、使用方法以及內(nèi)存管理的基礎理解。第三周則將重點放在了類與類之間的關聯(lián)暮现,包括三個武器:復合(組合)还绘、委托、繼承栖袋,虛函數(shù)及多態(tài)拍顷,以及重點講解了將三個武器組合使用的一個例子composite設計模式。侯老師的課是啟發(fā)式的塘幅,從這一個例子講解類與類之間的關系昔案,理解難度很大,但是仔細跟隨設計思路思考电媳,會啟發(fā)很多新的思路踏揣,對理解這三種基本也是頗有助力。
繼承與組合
侯老師上課時關于繼承和組合的關系匾乓,留下一個問題:子類Devried 公有繼承自父類base捞稿,并且含有一個component的對象。那么在構(gòu)建一個對象時,哪一個組件先生成呢娱局?
現(xiàn)在來代碼測試:
#include<iostream>
using namespace std;
class base
{
int b;
public:
base() { cout << "base ctor.\n"; };
virtual ~base() { cout << "base dtor.\n"; };
};
class component
{
int c;
public:
component() { cout << "component ctor.\n"; };
~component() { cout << "component dtor.\n"; };
};
class Derived:public base
{
component co;
public:
Derived() { cout << "Derived ctor.\n"; };
~Derived() { cout << "Derived dtor.\n"; };
};
int main()
{
{
base B;
component C;
Derived D;
}
cin.get();
return 0;
}
運行結(jié)果:
可以看出生成Derived對象D時彰亥,先調(diào)用base ctor,后調(diào)用component ctor。
理解:基類構(gòu)造函數(shù)構(gòu)造對象是先調(diào)用父類的構(gòu)造函數(shù)(類似于列表初始化)衰齐,然后再進行自身增加數(shù)據(jù)的構(gòu)造任斋,而component對象com是屬于Derived類的一個數(shù)據(jù)成員,等父類的內(nèi)容構(gòu)造完成后耻涛,再調(diào)用component構(gòu)造函數(shù)構(gòu)造對象co废酷。
UML類圖
侯老師在講解基本設計方式時,采用了一種圖形方式表達設計方式類成員間的關系抹缕,即UML類圖澈蟆。能很簡潔的將個部分的邏輯關系展現(xiàn)出來,更清晰的展示設計思路歉嗓。但開始接觸很生疏丰介,很多表示方法不明白,結(jié)合課程中的講解和網(wǎng)上查閱資料總結(jié)一下知識點[1],[2]:
類(class)使用三層矩形表示鉴分,分3個部分:
1哮幢,類名。抽象類(含有純虛函數(shù)的類)用斜體表示志珍。
2橙垢,字段和屬性。我理解為包含的數(shù)據(jù)成員伦糯。上圖中冒號(:)前面為notice為變量(對象)名柜某,冒號(:)后為類型(類)名。變量(對象)名下加下劃線敛纲,表示靜態(tài)數(shù)據(jù)喂击。
3,類的方法淤翔。虛方法使用斜體表示翰绊。冒號(:)前面為函數(shù)名和接受的參數(shù),冒號(:)后面為返回的參數(shù)旁壮,靜態(tài)成員函數(shù)下加下劃線监嗜。
注意:在2、3中字段抡谐、屬性裁奇、方法前面可以加符號表示作用域:‘+’表示public,‘-’表示private麦撵,‘#’表示protected刽肠。
接口(interface),使用兩層矩形表示溃肪,分2個部分組成:
1,接口名
2音五,接口實現(xiàn)方法
我理解是一些全局的實現(xiàn)方法匯成的面向用戶(或下一級)的接口乍惊。
其他
途中折頁的白色框,用虛線連至方法放仗,表示該方法中的關鍵性內(nèi)容。