OOP[GeekBand]

1 面向?qū)ο蟮娜汛蟮?-復(fù)合璃吧、委托和繼承

1.1復(fù)合(Composition)

1.1.1 定義

復(fù)合表示的是has-a的關(guān)系楷掉。在實(shí)現(xiàn)類中包含有復(fù)合類的一個(gè)完整實(shí)體吵瞻,是一種類與類之間強(qiáng)的關(guān)系运嗜。在UML圖示中用實(shí)心菱形表示仲翎。代碼示例如下:

class A;
class B{A a;}

1.1.2 復(fù)合關(guān)系下的構(gòu)造和析構(gòu)

  • 構(gòu)造由內(nèi)而外
    復(fù)合關(guān)系下的構(gòu)造函數(shù)痹扇,先執(zhí)行復(fù)合類的默認(rèn)構(gòu)造函數(shù),在執(zhí)行自身的構(gòu)造函數(shù)體谭确。如果不希望調(diào)用復(fù)合類的默認(rèn)構(gòu)造函數(shù)或者復(fù)合類沒(méi)有默認(rèn)構(gòu)造函數(shù)帘营,則要在初始化列表中做顯示的初始化。如下:
class A{
    int x;
public:
    A(int _x):x(_x){}
}
class B{
    A a;
    int _y;
public:
    B(int x,int y):a(x),_y(y){}
};
  • 析構(gòu)由外而內(nèi)
    復(fù)合關(guān)系下的構(gòu)造函數(shù)逐哈,先執(zhí)行自身的析構(gòu)函數(shù),在執(zhí)行復(fù)合類的析構(gòu)函數(shù)问顷。

1.2 委托(Delegation) Composition by reference

委托表示的也是has-a的關(guān)系昂秃。在實(shí)現(xiàn)類中包含有委托類的一個(gè)引用,是類與類之間比較弱的關(guān)系杜窄,在UML圖示中用空心棱形表示肠骆。代碼示例如下:

class A;
class B{
    A *p;
}

1.3 繼承(Inheritance)

1.3.1 定義

類通過(guò)繼承聯(lián)系在一起構(gòu)成一種層次結(jié)構(gòu)。在這種層次結(jié)構(gòu)中塞耕,頂層的類叫做父類或基類蚀腿;其他類則直接或間接的從基類繼承而來(lái),這些繼承而來(lái)的類稱為派生類或子類扫外。在UML圖示中用空心三角形表示莉钙。
在C++中,繼承有三種實(shí)現(xiàn)方式筛谚,公有繼承(public)磁玉,保護(hù)繼承(protected)和私有(private)繼承。通過(guò)在類派生列表中指定驾讲。派生列表的形式為class drived_class:public A,protected B,private C蚊伞。類派生列表中的訪問(wèn)說(shuō)明符并不影響直接子類訪問(wèn)父類的成員,而是限制子類的客戶訪問(wèn)基類的成員吮铭。也就是說(shuō)时迫,當(dāng)使用Private繼承基類C時(shí),子類依然可以訪問(wèn)父類C的公有成員和保護(hù)成員谓晌,但是子類的子類及子類的調(diào)用者則無(wú)法訪問(wèn)基類C中的所有成員掠拳,包括C中的公有成員。因?yàn)樵眩宇惏碢rivate從父類繼承成員時(shí)碳想,將父類所有的成員都繼承為自己的Private成員烧董,因此類的用戶就無(wú)法調(diào)用。
注意:一般情況下胧奔,都是用Public繼承逊移,Protected和private很少用。

1.3.2 繼承關(guān)系下的構(gòu)造和析構(gòu)

  • 構(gòu)造由內(nèi)而外
    繼承關(guān)系下的構(gòu)造函數(shù)龙填,先執(zhí)行父類的默認(rèn)構(gòu)造函數(shù)胳泉,在執(zhí)行自身的構(gòu)造函數(shù)體。如果不希望調(diào)用復(fù)合類的默認(rèn)構(gòu)造函數(shù)或者復(fù)合類沒(méi)有默認(rèn)構(gòu)造函數(shù)岩遗,則要在初始化列表中做顯示的初始化扇商。如下:
class A{
    int x;
public:
    A(int _x):x(_x){}
}
class B:public A{
    A a;
    int _y;
public:
    B(int x,int y):a(x),_y(y){}
};
  • 析構(gòu)由外而內(nèi)
    繼承關(guān)系下的構(gòu)造函數(shù),先執(zhí)行自身的析構(gòu)函數(shù)宿礁,在執(zhí)行父類的析構(gòu)函數(shù)案铺。

2 虛函數(shù)與多態(tài)

2.1 虛函數(shù)

2.1.1 虛函數(shù)定義

對(duì)于某些函數(shù),如果基類希望子類實(shí)現(xiàn)符合各自需求的版本梆靖,那就可以把這些函數(shù)聲明為虛函數(shù)控汉。子類必須在其內(nèi)部實(shí)現(xiàn)中隊(duì)重新定義的虛函數(shù)進(jìn)行聲明。聲明虛函數(shù)時(shí),需要在函數(shù)聲明的前面添加virtual,如virtual void a_virt_func();

2.1.2 虛函數(shù)使用場(chǎng)景

  • non-virtual函數(shù)
    你不希望子類重新定義(override)父類的函數(shù)重慢。
  • virtual函數(shù)
    你希望子類重新定義(override)它,但是希望它有默認(rèn)定義街佑。
  • pure virtual函數(shù)
    你希望子類重新定義(override)它,但是對(duì)他沒(méi)有默認(rèn)的定義捍靠。

2.2 多態(tài)

多態(tài)是OOP的核心思想沐旨,意思為“多種形式”。我們把具有繼承關(guān)系的多個(gè)類型稱作多態(tài)類型剂公,因?yàn)槲覀兡苁褂眠@些類型的“多種形式”而無(wú)須在意他們之間的差異希俩。在C++中,引用和指針的動(dòng)態(tài)類型和靜態(tài)類型的不一致正是實(shí)現(xiàn)這一機(jī)制的關(guān)鍵纲辽。

參考資料:

1.GeekBand課件
2.cpp primer 5th edition

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颜武,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拖吼,更是在濱河造成了極大的恐慌鳞上,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吊档,死亡現(xiàn)場(chǎng)離奇詭異篙议,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門鬼贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)移怯,“玉大人,你說(shuō)我怎么就攤上這事这难≈畚螅” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵姻乓,是天一觀的道長(zhǎng)嵌溢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹋岩,這世上最難降的妖魔是什么赖草? 我笑而不...
    開(kāi)封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮剪个,結(jié)果婚禮上秧骑,老公的妹妹穿的比我還像新娘。我一直安慰自己禁偎,他們只是感情好腿堤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著如暖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忌堂。 梳的紋絲不亂的頭發(fā)上盒至,一...
    開(kāi)封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音士修,去河邊找鬼枷遂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棋嘲,可吹牛的內(nèi)容都是我干的酒唉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沸移,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼痪伦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雹锣,我...
    開(kāi)封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤网沾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蕊爵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辉哥,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醋旦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恒水。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饲齐,靈堂內(nèi)的尸體忽然破棺而出钉凌,到底是詐尸還是另有隱情,我是刑警寧澤箩张,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布甩骏,位于F島的核電站,受9級(jí)特大地震影響先慷,放射性物質(zhì)發(fā)生泄漏饮笛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一论熙、第九天 我趴在偏房一處隱蔽的房頂上張望福青。 院中可真熱鬧,春花似錦脓诡、人聲如沸无午。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宪迟。三九已至,卻和暖如春交惯,著一層夾襖步出監(jiān)牢的瞬間次泽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工席爽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留意荤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓只锻,卻偏偏與公主長(zhǎng)得像玖像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子齐饮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容