成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

【學習筆記】C++語言程序設計(鄭莉):繼承與派生-創(chuàng)新互聯(lián)

【學習筆記】C++語言程序設計(鄭莉):繼承與派生
  • 1. 類的繼承與派生
    • 1.1 派生類的定義
    • 1.2 派生類生成過程
  • 2. 訪問控制
  • 3. 類型兼容規(guī)則
  • 4. 派生類的構(gòu)造和析構(gòu)函數(shù)
    • 4.1 構(gòu)造函數(shù)
    • 4.2 析構(gòu)函數(shù)
  • 5. 派生類成員的標識與訪問
    • 5.1 作用域分辨符
    • 5.2 虛基類

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設計、阿克陶網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
1. 類的繼承與派生

所謂繼承就是從先輩處得到屬性和行為特征。類的繼承,是新的類從已有類那里得到已有的特性。從另一個角度來看,從已有類產(chǎn)生新類的過程就是類的派生。由原有類產(chǎn)生新類時,新類便包含了原有類特征,同時也可以加入自己所特有的新特征。原有的類稱為基類或父類,產(chǎn)生的新類稱為派生類或子類。

  • 繼承的目的:實現(xiàn)代碼與設計的重用
  • 派生的目的:當新的問題出現(xiàn)時,原有程序無法解決時,需要對原有程序進行改造
1.1 派生類的定義

派生類的一般定義語法為:

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個步驟:吸收基類成員、改造基類成員和添加新的成員。

  • 吸收基類成員:類繼承中,第一步是將基類的成員全盤接收,這樣派生類實際上就包含了它的全部基類中除構(gòu)造和析構(gòu)函數(shù)之外的所有成員
  • 改造基類成員:對基類成員的改造包括兩個方面:一是基類成員的訪問控制問題主要依靠派生類定義時的繼承方式來控制;另一個是對基類數(shù)據(jù)或函數(shù)成員的覆蓋或隱藏。如果派生類聲明了一個和某基類成員同名的新成員(如果是成員函數(shù),參數(shù)表也要相同,參數(shù)不同的情況屬于重載),派生的新成員就隱藏了外層同名成員。
  • 添加新的成員:根據(jù)實際情況的需要,給派生類添 加適當?shù)臄?shù)據(jù)和函數(shù)成員,來實現(xiàn)必要的新增功能。
2. 訪問控制

基類的自身成員可以對基類中任何一個其它成員進行訪問,但是通過基類的對象,就只能訪問該類的公有成員。類的繼承方式有public、protected和private三種。不同的繼承方式,導致原來具有不同訪問屬性的基類成員在派生類中的訪問屬性也有所不同。這里的訪問分為:一是派生類中的新增成員訪問從基類繼承的成員。二是在派生類外部,通過派生類的對象訪問從基類繼承的成員。

  • 公有繼承:當類的繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可直接訪問。在類族之外只能通過派生類的對象訪問從基類繼承的公有成員。無論是派生類的成員還是派生類的對象都無法直接訪問基類的私有成員。
  • 私有繼承:當類的繼承方式為私有繼承時,基類中的公有成員和保護成員都以私有成員身份出現(xiàn)在派生類中,而基類的私有成員在派生類中不可直接訪問。派生類的其它成員可以直接訪問從基類繼承而來的公有和保護成員,但是在類族外部通過派生類的對象無法直接訪問它們。
  • 保護繼承:保護繼承中,基類的公有成員和保護成員都以保護成員的身份出現(xiàn)在派生類中,而基類的私有成員不可直接訪問。派生類的其它成員可以直接訪問從基類繼承而來的公有和保護成員,但在類外部通過派生類的對象無法直接訪問它們。
  • 私有繼承和保護繼承的異同:
    • 在直接派生類中,所有成員的訪問屬性都是完全相同的
    • 如果派生類作為新的基類繼續(xù)派生時,兩者就有了區(qū)別。假設Rectangle類以私有方式繼承了Point類后,Rectangle類又派生出Square類,那么Square類的成員和對象都不能訪問間接從Point類中繼承來的成員。如果Rectangle類是以保護方式繼承了Point類,那么Point類中的公有和保護成員在Rectangle類中都是保護成員。Rectangle類再派生出Square類后,Point類中的公有成員和保護成員被Square類間接繼承后,有可能是保護成員或私有成員(按具體派生方式可知)。因此,Square類的成員有可能可以訪問間接從Point類中繼承來的成員。即Point類中的保護成員有可能被它的派生類訪問,但是絕不可能被其它外部使用者訪問。

3. 類型兼容規(guī)則

類型兼容規(guī)則是指在需要基類對象的任何地方,都可以使用公有派生類的對象來替代。類型兼容規(guī)則中所指的替代包括以下的情況:

  • 派生類的對象可以隱含轉(zhuǎn)換為基類對象
  • 派生類的對象可以初始化基類的引用
  • 派生類的指針可以隱含轉(zhuǎn)換為基類的指針

在替代之后,派生類對象就可以作為基類的對象使用,但只能使用從基類繼承的成員。

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í)行的一般次序為:

  • 調(diào)用基類構(gòu)造函數(shù),調(diào)用順序按照它們被繼承時聲明的順序
  • 對派生類新增的成員對象初始化,調(diào)用順序按照他們在類中聲明的順序
  • 執(zhí)行派生類的構(gòu)造函數(shù)體
4.2 析構(gòu)函數(shù)

在派生過程中,基類的析構(gòu)函數(shù)也不能繼承下來,如果需要析構(gòu),就要在派生類中聲明新的構(gòu)造函數(shù)。派生類的析構(gòu)函數(shù)的功能是在該類對象消亡之前進行一些必要的清理工作。析構(gòu)函數(shù)沒有類型,也沒有參數(shù)。


5. 派生類成員的標識與訪問

在派生類中,成員可以按訪問屬性劃分為:不可訪問的成員、私有成員、保護成員和公有成員。

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)

綿陽服務器托管
库车县| 博客| 柳林县| 涟源市| 五大连池市| 宜宾县| 马鞍山市| 盘锦市| 那坡县| 布拖县| 蛟河市| 广昌县| 霍邱县| 绥滨县| 区。| 鄂尔多斯市| 九江县| 浙江省| 吉水县| 赤峰市| 九龙县| 井研县| 通许县| 盘锦市| 乐至县| 怀安县| 博乐市| 江山市| 华亭县| 汪清县| 林州市| 乌鲁木齐市| 醴陵市| 蕉岭县| 昔阳县| 佳木斯市| 灵宝市| 高陵县| 论坛| 永嘉县| 塔河县|