<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
繼承機制是物件導向程式設計使程式碼可以複用的最重要手段,它允許程式設計師在保留原有類特性的基礎上進行擴充套件,增加功能,這樣產生的類,稱為派生類。繼承呈現了物件導向程式設計的層次結構,體現了由簡單到複雜的認知過程。繼承是類設計層次的複用。
個人理解:父類別實際上是抽取類的共性,將其它類都有的屬性和方法進行提取,再定義其它類時只需要繼承父類別,並寫出該類獨有的屬性即可。
以Person類為父類別,Student類為學生類舉例:
父類別
子類
這裡Student類繼承了Person類,學生中就包含Person類中的name和age兩個屬性,只需要再寫出Student類獨有的num屬性即可。
存取限定符與繼承許可權
一句話總結上面的表格:繼承許可權決定了子類能繼承的父類別的最高許可權。即public繼承不會改變類成員的存取許可權;protected繼承方式會改變原來存取許可權為public的成員;private繼承方式會影響原來存取許可權為public和protected的成員。
另外還有幾點要注意:
父類別的private成員被子類繼承了,但是子類不能存取父類別的private成員,通過檢視子類的大小可以得知,子類中包含繼承自父類別的私有成員變數。
在子類中存取父類別私有成員會報錯:
檢視子類大小:
ps: class和struct的區別
這裡的複製相容規則是在public繼承的前提下:
仍以 Person類和Student類舉例:
Person類:
lass Person { protected: string _name; int _age ; };
Student類繼承Person類:
class Student :public Person { protected: int _num = 1; };
分別驗證賦值、指標和參照:
原理如圖:
指標和參照原理與上圖相同,父類別的指標可以指向子類中繼承自父類別的部分;但是子類的指標如果指向父類別,存取_name和_age時不會有問題,存取到_num時就會超出父類別物件的範圍,越界存取,所以編譯器禁止了子類指標指向父類別物件。
Person類:
class Person { public: void Print() { cout << "Person name:" << _name << endl; cout << "Person age" << _age << endl; } protected: string _name = "ZS"; int _age = 17; };
Student類繼承Person類:
class Student :public Person { public: void Print() { cout << "Student name:" << _name << endl; cout << "Student age:" << _age << endl; cout << "Student num:" << _num << endl; } protected: string _name = "LS"; int _age = 18; int _num = 2; };
驗證結果:
當不加作用域限定符時,子類物件會優先存取自己的成員變數和成員函數。
對程式稍作修改:
這裡兩個Print函數的引數不同,看起來像“過載”,但是實際上是同名隱藏,子類中對父類別的Print函數進行了重定義。
父類別 沒有顯式定義建構函式 或者父類別有 全預設的建構函式 或者 無參的建構函式 ,子類可以不定義建構函式。
即下面三種情況,子類都可以不顯式地給出建構函式:
但是如果父類別顯式定義了建構函式,且不是無參或者全預設的,子類必須顯式定義建構函式,並在初始化列表顯式呼叫父類別的建構函式,因為如果不顯式定義,編譯器會自動呼叫父類別預設拷貝建構函式,而父類別沒有預設的建構函式,便會報錯:
正確的寫法:
這裡的name是傳遞給Person類建構函式的實參,即:用name給Student物件中繼承的_name賦值。
構造一個Student類的物件分兩步:
子類的拷貝建構函式必須在初始化列表中顯式呼叫父類別的拷貝建構函式。
父類別沒有定義拷貝建構函式,子類可以定義也可以不定義;父類別如果定義了拷貝建構函式,子類一般要定義,並且要在初始化列表中呼叫父類別的拷貝建構函式完成從父類別繼承的成員的拷貝初始化,否則會報錯:
正確寫法:
此處s是傳遞給拷貝建構函式的引數。
子類的賦值運運算元過載函數必須呼叫父類別的賦值運運算元過載完成對父類別的賦值。
父類別的賦值運運算元過載:
子類:
子類解構函式會在被呼叫完後自動呼叫父類別的解構函式完成清理父類別成員,所以清理順序是:先清理子類,再清理父類別。
構造子類物件時,先呼叫父類別的建構函式,再呼叫子類別建構函式,清理物件時,先呼叫子類的解構函式,再呼叫父類別的解構函式。
如圖:
因為構造子類物件時會在初始化列表中呼叫父類別的建構函式,執行完之後才會執行子類別建構函式的函數體,所以父類別的構造會先於子類的構造執行。
友元關係不能繼承
tips:王叔是你父親的好朋友,但是不一定是你的好朋友,王叔的財產不會 給你繼承
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45