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