類的繼承與派生

類的繼承與派生

繼承的概念

使用基類派生新類時(shí),除構(gòu)造函數(shù)和析構(gòu)函數(shù)外 者冤,基類的所有成員自動成為派生類的成員淮蜈,包括基類的成員變量和成員函數(shù)哺窄。

派生類可以 重新定義或修改 基類中已有的成員般婆,包括可以改變基類中成員的 訪問權(quán)限 到腥。

派生類的定義和大小

派生類的定義:

class 基類名
{

};

class 派生類名: public 基類名
{

};

存儲空間的計(jì)算:派生類對象 = 基類成員 + 派生類成員

使用 sizeof() 函數(shù)可以計(jì)算對象占用的存儲空間蔚袍。

繼承關(guān)系的特殊性

基類的友元類或友元函數(shù) 乡范,派生類 不會繼承

基類是某類的友元類页响,則派生類也是某類的友元類篓足。

基類的成員函數(shù)是某類的友元函數(shù),則派生類繼承的成員函數(shù)也是某類的友元函數(shù)闰蚕。

基類的靜態(tài)屬性隨靜態(tài)成員被繼承栈拖,即:靜態(tài)屬性被繼承

派生類通過使用 <類名>::<成員名> 的方式引用或調(diào)用靜態(tài)成員没陡。

有繼承關(guān)系的類之間的訪問

使用 :: 作用域標(biāo)識符涩哟,可以訪問基類的非私有成員。

// 在派生類的成員函數(shù)中訪問
<基類名>::<成員變量名>; // 基類的成員變量
<基類名>::<成員函數(shù)名>(); // 基類的成員函數(shù)

// 派生類的對象訪問
<派生類對象名>.<基類名>::<成員變量名>;
<派生類對象名>.<基類名>::<成員函數(shù)名>();

protected 訪問范圍說明符

基類中的保護(hù)成員可以在派生類的成員函數(shù)中被訪問盼玄。

在基類中贴彼,一般都將 需要隱藏的成員 說明為保護(hù)成員而非私有成員。

多重繼承

一個(gè)類從多個(gè)基類派生的一般格式:

class 派生類名: 繼承方式說明符 基類名1, 繼承方式說明符 基類名2
{
  類體
};

如果派生類中新增了同名成員埃儿,則派生類成員將 隱藏 所有基類的同名成員器仗。

當(dāng)派生類通過多重繼承的形式,繼承了多個(gè)基類童番,且多個(gè)基類中擁有同名成員精钮,需要使用 作用域標(biāo)識符 :: 來避免二義性。

訪問控制

設(shè)計(jì)繼承類時(shí)剃斧,需要使用 繼承方式說明符 指明派生類的繼承方式轨香。

繼承方式說明符:publicprivate幼东、protected 臂容。

公有繼承

繼承方式說明符:public

當(dāng)一個(gè)類派生自 公有 基類時(shí)根蟹,基類的 公有 成員也是派生類的 公有 成員脓杉,基類的 保護(hù) 成員也是派生類的 保護(hù) 成員,基類的 私有 成員 不能 直接被派生類訪問简逮,但是可以通過調(diào)用基類的公有和保護(hù)成員來訪問丽已。

私有繼承

繼承方式說明符:private

當(dāng)一個(gè)類派生自 私有 基類時(shí)买决,基類的 公有保護(hù) 成員將成為派生類的 私有 成員沛婴。

保護(hù)繼承

繼承方式說明符:protected 吼畏。

當(dāng)一個(gè)類派生自 保護(hù) 基類時(shí),基類的 公有保護(hù) 成員將成為派生類的 保護(hù) 成員嘁灯。

類型兼容規(guī)則

類型兼容規(guī)則是指需要基類對象的任何地方泻蚊,都可以使用公有派生類的對象來代替,也稱為 賦值兼容規(guī)則 丑婿。

公有 派生的前提下性雄,有以下3條兼容規(guī)則:

  1. 派生類對象可以賦值給基類對象;
  2. 派生類對象可以用來初始化基類引用羹奉;
  3. 派生類對象的地址可以賦值給基類指針秒旋,即派生類的指針可以賦值給基類的指針。

派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)

派生類對象 創(chuàng)建 時(shí)诀拭,總是先執(zhí)行基類的構(gòu)造函數(shù)迁筛,再執(zhí)行派生類的構(gòu)造函數(shù)。

派生類對象 消亡 時(shí)耕挨,總是先執(zhí)行派生類的析構(gòu)函數(shù)细卧,再執(zhí)行基類的析構(gòu)函數(shù)。

定義派生類構(gòu)造函數(shù)的一般格式如下:

派生類名::派生類名(參數(shù)表): 基類名1(基類1的參數(shù)表), 基類名2(基類2的參數(shù)表)
{
  派生類構(gòu)造函數(shù)體
};

派生類構(gòu)造函數(shù)的執(zhí)行次序:

  1. 調(diào)用基類構(gòu)造函數(shù)筒占,調(diào)用順序按照:它們 被繼承時(shí)聲明的順序 贪庙;
  2. 對派生類新增的成員變量 初始化,調(diào)用順序按照:它們在 類中聲明的順序 翰苫;
  3. 執(zhí)行派生類的構(gòu)造函數(shù)體中的內(nèi)容止邮。

類之間的關(guān)系

使用已有類編寫新的類有兩種方式:繼承組合

繼承 關(guān)系也稱 “is a” 關(guān)系或 “是” 關(guān)系奏窑。具有 傳遞性 导披。

組合 關(guān)系也稱 “has a” 關(guān)系或 “有” 關(guān)系。表現(xiàn)為 封閉類良哲。

多層次的派生

在 C++ 中盛卡,派生是可以多層次的助隧。

根據(jù)是否直接繼承關(guān)系筑凫,可以分為:直接基類間接基類

一個(gè)基類可以被多次說明為某個(gè)派生類的間接基類并村,但只能成為一次直接基類巍实。

當(dāng)生成派生類的對象時(shí),會從最頂層的基類開始逐層往下執(zhí)行所有基類的構(gòu)造函數(shù)哩牍,最后執(zhí)行派生類自身的構(gòu)造函數(shù)棚潦。

當(dāng)派生類的對象消亡時(shí),會執(zhí)行自身的析構(gòu)函數(shù)膝昆,然后自底向上執(zhí)行各個(gè)基類的析構(gòu)函數(shù)丸边。

基類與派生類指針的互相轉(zhuǎn)換

公有 派生的情況下叠必,因?yàn)榕缮悓ο笠彩腔悓ο螅?strong>所以派生類對象可以賦值給基類對象 。

對于指針類型妹窖,可以使用基類指針指向派生類對象纬朝,也可以將派生類的指針直接賦值給基類指針。

注意:即使基類指針指向一個(gè)派生類對象骄呼,不能通過基類指針訪問派生類的成員函數(shù)共苛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜓萄,隨后出現(xiàn)的幾起案子隅茎,更是在濱河造成了極大的恐慌,老刑警劉巖嫉沽,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辟犀,死亡現(xiàn)場離奇詭異,居然都是意外死亡耻蛇,警方通過查閱死者的電腦和手機(jī)踪蹬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臣咖,“玉大人跃捣,你說我怎么就攤上這事《嵘撸” “怎么了疚漆?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刁赦。 經(jīng)常有香客問我娶聘,道長,這世上最難降的妖魔是什么甚脉? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任丸升,我火速辦了婚禮,結(jié)果婚禮上牺氨,老公的妹妹穿的比我還像新娘狡耻。我一直安慰自己,他們只是感情好猴凹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布夷狰。 她就那樣靜靜地躺著,像睡著了一般郊霎。 火紅的嫁衣襯著肌膚如雪沼头。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音进倍,去河邊找鬼土至。 笑死,一個(gè)胖子當(dāng)著我的面吹牛猾昆,可吹牛的內(nèi)容都是我干的毙籽。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼毡庆,長吁一口氣:“原來是場噩夢啊……” “哼坑赡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起么抗,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤毅否,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蝇刀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體螟加,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年吞琐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捆探。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡站粟,死狀恐怖黍图,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奴烙,我是刑警寧澤助被,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站切诀,受9級特大地震影響揩环,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幅虑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一丰滑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倒庵,春花似錦褒墨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柬唯。三九已至认臊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锄奢,已是汗流浹背失晴。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工剧腻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涂屁。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓书在,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拆又。 傳聞我的和親對象是個(gè)殘疾皇子儒旬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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

  • 類的繼承與類的派生 繼承和派生是人們認(rèn)識客觀世界的過程栈源。在程序設(shè)計(jì)方法中,人們追求代碼復(fù)用(這是提高軟件開發(fā)效率的...
    silasjs閱讀 1,270評論 0 1
  • 類的繼承與派生 類的繼承就是新類由已經(jīng)存在的類獲得已有特性竖般,類的派生是由已經(jīng)存在的類產(chǎn)生新類的過程甚垦。已有類叫做基類...
    Mr希靈閱讀 616評論 0 1
  • 轉(zhuǎn)自大神博客凡程子 一、基本概念 類的繼承涣雕,是新的類從已有類那里得到已有的特性艰亮。或從已有類產(chǎn)生新類的過程就是類的派...
    leon4ever閱讀 485評論 0 0
  • 注意:本文中代碼均使用 Qt 開發(fā)編譯環(huán)境 C++ 類型兼容規(guī)則### 類型兼容規(guī)則是指在需要基類對象的任何地方挣郭,...
    趙者也閱讀 856評論 0 0
  • 注意:本文中代碼均使用 Qt 開發(fā)編譯環(huán)境 派生類的目的是為了發(fā)展迄埃,派生類繼承了基類的成員,實(shí)現(xiàn)了原有代碼的重用兑障,...
    趙者也閱讀 2,028評論 0 1