所謂繼承就是從先輩處得到屬性和行為特征。類的繼承,是新的類從已有類那里得到已有的特性。從另一個(gè)角度來(lái)看,從已有類產(chǎn)生新類的過(guò)程就是類的派生。由原有類產(chǎn)生新類時(shí),新類便包含了原有類特征,同時(shí)也可以加入自己所特有的新特征。原有的類稱為基類或父類,產(chǎn)生的新類稱為派生類或子類。
派生類的一般定義語(yǔ)法為:
class 派生類名:繼承方式 基類名1,繼承方式 基類名2,...,繼承方式 基類名n{
派生類成員聲明;
}
//假設(shè)基類Base1和Base2是已經(jīng)定義的類,則下面定義了Derived的派生類,該類從基類Base1和Base2派生而來(lái)
class Derived:public Base1,private Base2{public:
Derived();
~Derived();
一個(gè)派生類只有一個(gè)直接基類的情況,稱為單繼承;一個(gè)派生類,可以同時(shí)有多個(gè)基類,這種情況稱為多繼承。在類族中,直接參與派生出某類的基類稱為直接基類,基類的基類甚至更高層的基類稱為間接基類。
在派生類的定義中,處理要指定基類外,還需要指定繼承方式。繼承方式規(guī)定了如何訪問(wèn)從基類繼承的成員。在派生類的定義語(yǔ)句中,每一個(gè)繼承方式,只限定緊隨其后的基類。繼承方式關(guān)鍵字為:public, protected和private,分別表示公有繼承、保護(hù)繼承和私有繼承。如果不顯式的給出繼承方式關(guān)鍵字,系統(tǒng)的默認(rèn)值為私有繼承(private)。
前面的例子中對(duì)Base1是公有繼承,對(duì)Base2是私有繼承,同時(shí)聲明了派生類自己新的構(gòu)造函數(shù)和析構(gòu)函數(shù)。派生類成員是指除了從基類繼承來(lái)的所有成員之外,新增加的數(shù)據(jù)和函數(shù)成員。
1.2 派生類生成過(guò)程派生新類的過(guò)程實(shí)際經(jīng)歷了3個(gè)步驟:吸收基類成員、改造基類成員和添加新的成員。
基類的自身成員可以對(duì)基類中任何一個(gè)其它成員進(jìn)行訪問(wèn),但是通過(guò)基類的對(duì)象,就只能訪問(wèn)該類的公有成員。類的繼承方式有public、protected和private三種。不同的繼承方式,導(dǎo)致原來(lái)具有不同訪問(wèn)屬性的基類成員在派生類中的訪問(wèn)屬性也有所不同。這里的訪問(wèn)分為:一是派生類中的新增成員訪問(wèn)從基類繼承的成員。二是在派生類外部,通過(guò)派生類的對(duì)象訪問(wèn)從基類繼承的成員。
類型兼容規(guī)則是指在需要基類對(duì)象的任何地方,都可以使用公有派生類的對(duì)象來(lái)替代。類型兼容規(guī)則中所指的替代包括以下的情況:
在替代之后,派生類對(duì)象就可以作為基類的對(duì)象使用,但只能使用從基類繼承的成員。
4. 派生類的構(gòu)造和析構(gòu)函數(shù)由于基類的構(gòu)造和析構(gòu)函數(shù)不能被繼承,在派生類時(shí)中,如果對(duì)派生類新增的成員進(jìn)行初始化,就必須為派生類添加新的構(gòu)造函數(shù)。但是派生類的構(gòu)造函數(shù)只負(fù)責(zé)對(duì)派生類新增的成員進(jìn)行初始化,對(duì)所有從基類繼承下來(lái)的成員,其初始化工作還是由基類的構(gòu)造函數(shù)完成,同樣,對(duì)派生類對(duì)象的掃尾、清理工作也需要加入新的析構(gòu)函數(shù)。
4.1 構(gòu)造函數(shù)構(gòu)造派生類的對(duì)象時(shí),就要對(duì)基類的成員對(duì)象和新增成員對(duì)象進(jìn)行初始化。在構(gòu)造派生類的對(duì)象時(shí),會(huì)首先調(diào)用基類的構(gòu)造函數(shù)來(lái)初始化它們的數(shù)據(jù)成員,然后按照構(gòu)造函數(shù)初始化列表中指定的方式初始化派生類新增的成員對(duì)象,最后才執(zhí)行派生類構(gòu)造函數(shù)的函數(shù)體。派生類構(gòu)造函數(shù)的一般語(yǔ)法形式為:
派生類名::派生類名(參數(shù)表):基類名1(基類1初始化參數(shù)表),...,基類名n(基類n初始化參數(shù)表),成員對(duì)象名1(成員對(duì)象1的初始化參數(shù)表),...,成員對(duì)象名 m(成員對(duì)象m初始化參數(shù)表){
派生類構(gòu)造函數(shù)的其他初始化操作;
}
如果對(duì)基類初始化時(shí),需要調(diào)用基類的帶有形參表的構(gòu)造函數(shù)時(shí),派生類就必須聲明構(gòu)造函數(shù)。派生類構(gòu)造函數(shù)執(zhí)行的一般次序?yàn)椋?/p>
在派生過(guò)程中,基類的析構(gòu)函數(shù)也不能繼承下來(lái),如果需要析構(gòu),就要在派生類中聲明新的構(gòu)造函數(shù)。派生類的析構(gòu)函數(shù)的功能是在該類對(duì)象消亡之前進(jìn)行一些必要的清理工作。析構(gòu)函數(shù)沒(méi)有類型,也沒(méi)有參數(shù)。
在派生類中,成員可以按訪問(wèn)屬性劃分為:不可訪問(wèn)的成員、私有成員、保護(hù)成員和公有成員。
5.1 作用域分辨符作用域分辨符 “::” 用來(lái)限定要訪問(wèn)的成員所在的類別名稱。一般的使用形式為:
類名::成員名 //數(shù)據(jù)成員
類名::成員名(參數(shù)表) //函數(shù)成員
如果派生類中聲明了與基類成員函數(shù)同名的新函數(shù),即使函數(shù)的參數(shù)表不同,從基類繼承的同名函數(shù)的所有重載形式也都會(huì)被隱藏。如果派生類的多個(gè)基類擁有同名的成員,同時(shí),派生類又新增這樣的同名成員,在這種情況下,派生類成員將隱藏所有基類的同名成員。
5.2 虛基類當(dāng)某類的部分或全部直接基類是從另一個(gè)共同基類派生而來(lái)時(shí),在這些直接基類中從上一級(jí)共同基類繼承來(lái)的成員就擁有多個(gè)相同的名稱。在派生類的對(duì)象中,這些同名數(shù)據(jù)成員在內(nèi)存中同時(shí)擁有多個(gè)副本,同一個(gè)函數(shù)名會(huì)有多個(gè)映射??梢允褂米饔糜蚍直娣麃?lái)唯一標(biāo)識(shí)并分別訪問(wèn)它們,也可以將共同基類設(shè)置為虛基類,這時(shí)從不同的路徑繼承過(guò)來(lái)的同名數(shù)據(jù)成員在內(nèi)存中就只有一個(gè)副本,同一個(gè)函數(shù)名也只有一個(gè)映射。虛基類的聲明是在派生類的定義過(guò)程中進(jìn)行的,語(yǔ)法格式為:
class 派生類名:virtual 繼承方式 基類名
課程鏈接:https://www.bilibili.com/video/BV1iF411Y74v
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站標(biāo)題:【學(xué)習(xí)筆記】C++語(yǔ)言程序設(shè)計(jì)(鄭莉):繼承與派生-創(chuàng)新互聯(lián)
URL分享:http://aaarwkj.com/article44/csoihe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、定制開發(fā)、服務(wù)器托管、虛擬主機(jī)、App開發(fā)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容