C++類型兼容規(guī)則詳情
在類的繼承過程中,子類繼承了父類除去構(gòu)造函數(shù)和析構(gòu)函數(shù)外的所有成員,那么父類的功能子類是不是都有呢?
實(shí)際上,子類是否含有父類的全部功能,取決于“繼承方式”。在共有(public)繼承的情況下,父類的public成員在子類中是public成員,父類的protected成員在子類中是protected成員。也就是說,此時(shí),父類對(duì)外暴露的功能,子類都有。
因此,在共有繼承時(shí),任何需要父類對(duì)象的地方,都能使用子類對(duì)象“替代”,這就是類型兼容規(guī)則。
其中“替代”包含下面三種情況:
- 子類對(duì)象隱含轉(zhuǎn)換為父類對(duì)象;
- 子類對(duì)象用于初始化父類引用;
- 子類對(duì)象地址隱含轉(zhuǎn)換為父類指針;
下面定義的三個(gè)函數(shù),分別對(duì)應(yīng)上述三種情況。其中Animal為父類,Duck為子類,Animal和Duck都定義了public類型的eat()函數(shù):
// 子類對(duì)象隱含轉(zhuǎn)換為父類對(duì)象;
void situationOne(Animal animal) {
?? ?animal.eat();
}?
// 子類對(duì)象用于初始化父類引用
void situationTwo(Animal &r) {
?? ?r.eat();
}
// 子類指針隱含轉(zhuǎn)換為父類指針
void situationThree(Animal *p) {
?? ?p->eat();
}現(xiàn)在,可以使用子類對(duì)象作為函數(shù)參數(shù)傳入到上述三個(gè)函數(shù)中:
Duck duck; situationOne(duck); situationTwo(duck); situationThree(&duck);
注意:三個(gè)函數(shù)中通過父類調(diào)用的eat()函數(shù)永遠(yuǎn)是“父類成員函數(shù)eat()”而不是“子類成員函數(shù)eat()”。也就是說,通過“類型兼容規(guī)則”訪問的永遠(yuǎn)是父類成員,而不是子類成員。
到此這篇關(guān)于C++類型兼容規(guī)則詳情的文章就介紹到這了,更多相關(guān)C++類型兼容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux C 打印錯(cuò)誤信息和標(biāo)準(zhǔn)輸入輸出詳細(xì)介紹
這篇文章主要介紹了linux C 打印錯(cuò)誤信息和標(biāo)準(zhǔn)輸入輸出詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12
Windows網(wǎng)絡(luò)編程之winsock實(shí)現(xiàn)文件傳輸示例
這篇文章主要介紹了Windows網(wǎng)絡(luò)編程之winsock實(shí)現(xiàn)文件傳輸示例,對(duì)于學(xué)習(xí)Windows網(wǎng)絡(luò)程序設(shè)計(jì)來說具有很好的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下2014-08-08
C++實(shí)現(xiàn)將數(shù)組中的值反轉(zhuǎn)
這里給大家分享的事一則C++實(shí)現(xiàn)將數(shù)組中的值反轉(zhuǎn)的代碼,取材自《C++程序設(shè)計(jì)》(梁勇著第三版367頁(yè)),有需要的小伙伴可以參考下2016-05-05
C++實(shí)現(xiàn)LeetCode(29.兩數(shù)相除)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(29.兩數(shù)相除),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

