国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++教程:C++類(lèi)和對(duì)象的繼承

2020-05-23 14:25:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在前面的章節(jié),我們學(xué)會(huì)了如何編寫(xiě)一個(gè)完整的類(lèi)。然而,面向?qū)ο蟮膬?yōu)勢(shì)還沒(méi)有被完全體現(xiàn)出來(lái)。特別是在編寫(xiě)一些相似的類(lèi)時(shí),可能會(huì)造成很多的浪費(fèi)。本章就將以一個(gè)文字游戲?yàn)槔虼蠹医榻B類(lèi)的繼承問(wèn)題。

劍士·弓箭手·法師的困惑

在一個(gè)角色扮演類(lèi)游戲(RPG)中,可能有各種不同職業(yè)的玩家,比如劍士、弓箭手和法師。雖然他們的職業(yè)不同,卻有著一些相似之處:他們都具有生命值(Health Point——HP)、魔法值(Magic Point——MP)、攻擊力(Attack Point——AP)、防御力(Defense Point——DP)、經(jīng)驗(yàn)值(Experience——EXP)和等級(jí)(Level——LV)。雖然他們有著相似之處,但又不完全相同:劍士和弓箭手都具有普通攻擊的技能,只不過(guò)劍士用的是劍,而弓箭手用的是弓箭。

這樣看來(lái),我們有麻煩了。如果只用一個(gè)類(lèi)來(lái)描述三種不同職業(yè)的玩家,肯定無(wú)法描述清楚。畢竟這三種職業(yè)不是完全相同的。如果用三個(gè)類(lèi)來(lái)描述這三種職業(yè),那么三者的共同點(diǎn)和內(nèi)在聯(lián)系就無(wú)法體現(xiàn)出來(lái),并且還造成了相同屬性和功能的重復(fù)開(kāi)發(fā)。

我們需要有一種好的方法,既能把劍士、弓箭手和法師的特點(diǎn)描述清楚,又能減少重復(fù)的開(kāi)發(fā)和冗余的代碼。在C++中,有一種稱(chēng)為繼承的方法,使我們可以用一種已經(jīng)編寫(xiě)好的類(lèi)來(lái)擴(kuò)寫(xiě)成一個(gè)新的類(lèi)。新的類(lèi)具有原有類(lèi)的所有屬性和操作,也可以在原有類(lèi)的基礎(chǔ)上作一些修改和增補(bǔ)。繼承實(shí)質(zhì)上是源于人們對(duì)事物的認(rèn)知過(guò)程:從抽象概念到具體事物。下面我們就來(lái)看看劍士、弓箭手和法師的邏輯關(guān)系:
C++教程:C++類(lèi)和對(duì)象的繼承
在上圖中玩家是一個(gè)抽象的概念,劍士、弓箭手和法師是具體的事物。任何一個(gè)玩家都具有生命值、魔法值等屬性,具有發(fā)動(dòng)普通攻擊和特殊攻擊的能力。不同職業(yè)的玩家在發(fā)動(dòng)普通攻擊和特殊攻擊時(shí),有著不同的效果。

如果你不太玩游戲,或者對(duì)劍士、弓箭手沒(méi)有什么概念,那么我們?cè)賮?lái)看看學(xué)生這個(gè)例子。學(xué)生是一個(gè)抽象的概念,具體的有本科生、中學(xué)生、小學(xué)生等。任何一個(gè)學(xué)生都具有姓名、身高、體重、性別等屬性,具有學(xué)習(xí)的能力。不同階段的學(xué)生在學(xué)習(xí)時(shí),內(nèi)容會(huì)有所不同。小學(xué)生學(xué)習(xí)四則運(yùn)算,中學(xué)生學(xué)習(xí)代數(shù)幾何,本科生學(xué)習(xí)高等數(shù)學(xué)。如下圖:
C++教程:C++類(lèi)和對(duì)象的繼承
為了描寫(xiě)小學(xué)生、中學(xué)生、本科生,我們可以寫(xiě)三個(gè)不同的類(lèi),但是會(huì)造成部分屬性和功能的重復(fù)開(kāi)發(fā)。我們也可以先設(shè)計(jì)一個(gè)學(xué)生類(lèi),描述出各種學(xué)生的共同屬性或功能,然后再針對(duì)不同種類(lèi)的學(xué)生做細(xì)節(jié)的修改。顯然,第二種做法更為省力、合理。

面向?qū)ο蟮睦^承性

如果有一個(gè)類(lèi),我們可以將其實(shí)例化,成為若干個(gè)對(duì)象。另外,如果我們希望對(duì)這個(gè)類(lèi)加以升級(jí)改造,我們可以將這個(gè)類(lèi)繼承,形成子類(lèi)(或者稱(chēng)為派生類(lèi)),被繼承的類(lèi)則稱(chēng)為父類(lèi)(或者稱(chēng)為基類(lèi))。實(shí)例化和繼承是一個(gè)類(lèi)的兩種發(fā)展方向。繼承能夠減少我們開(kāi)發(fā)程序的工作量,提高類(lèi)的重用性。

如果我們把編寫(xiě)一個(gè)類(lèi)看作是一次生產(chǎn),那么產(chǎn)品(即編寫(xiě)出來(lái)的類(lèi))可以有兩種用途:一種是將產(chǎn)品直接使用,相當(dāng)于將類(lèi)實(shí)例化;另一種是將產(chǎn)品用于再生產(chǎn),相當(dāng)于將類(lèi)繼承。類(lèi)在這種不斷的“再生產(chǎn)”中變得更為強(qiáng)大、健全。
在第15章中,我們?cè)鴮㈡湵斫Y(jié)點(diǎn)類(lèi)的實(shí)例對(duì)象作為鏈表類(lèi)的成員數(shù)據(jù)。這稱(chēng)為對(duì)象的組合,它與類(lèi)的繼承也是完全不同的概念。繼承(Inheritance)是概念的延續(xù),子類(lèi)和父類(lèi)一般都是概念擴(kuò)展的關(guān)系,我們通常把這種關(guān)系稱(chēng)為“是”關(guān)系。比如:本科生是學(xué)生,自行車(chē)是交通工具。而對(duì)象的組合是因功能需求產(chǎn)生的從屬關(guān)系,我們通常把這種關(guān)系稱(chēng)為“有”關(guān)系。比如:鏈表有一個(gè)頭結(jié)點(diǎn),電腦有一個(gè)中央處理器等等。

關(guān)于如何更合理地設(shè)置類(lèi)以及類(lèi)與類(lèi)之間關(guān)系的問(wèn)題,會(huì)在軟件工程這門(mén)課中作更詳盡的介紹。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌鲁木齐县| 巩留县| 广宁县| 新泰市| 兴化市| 镇平县| 杭州市| 澜沧| 盐源县| 长汀县| 河北区| 木兰县| 新津县| 临洮县| 万山特区| 且末县| 库尔勒市| 垦利县| 利津县| 藁城市| 修文县| 马边| 永川市| 政和县| 措美县| 营口市| 麻城市| 石棉县| 论坛| 南皮县| 淄博市| 镇康县| 龙川县| 上犹县| 潜山县| 密山市| 宁明县| 宜兰县| 锡林浩特市| 南部县| 剑阁县|