两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

在上一節(jié)中,我們看到了派生類的定義方法,用到了public的公有繼承,實際這里一共有三種方式,分別是公有繼承私有繼承、保護繼承。


不同的繼承方式,主要區(qū)別在于基類中不同訪問權(quán)限的成員在派生類中的訪問權(quán)限變化情況。下面一一介紹。


1. 公有繼承:

在公有繼承的模式下,其特點如下:

(1)基類中的公有成員,在派生類中仍然為公有成員,當(dāng)然無論派生里的成員函數(shù)還是派生類對象都可以訪問。

(2)基類中的私有成員,無論在派生類的成員還是派生類對象都不可以訪問。

(3)基類中的保護成員,在派生類中仍然是保護類型,可以通過派生類的成員函數(shù)訪問,但派生類對象不可以訪問。


2. 私有繼承:

在私有繼承的情況下,公有類型、私有類型、受保護類型三種成員的訪問權(quán)限如下:

(1)基類的公有和受保護類型,被派生類私有繼承吸收后,都變?yōu)榕缮惖乃接蓄愋?,即在類的成員函數(shù)里可以訪問,不能在類外訪問。

(2)而基類的私有成員,在派生類無論類內(nèi)還是類外都不可以訪問。


我們可以看出來,如果為私有派生,則基類的私有成員在派生類甚至再派生出的子類中,都無法再使用,沒有什么存在意義,故這種使用情況比較少。


3. 保護繼承:

保護類型的繼承,特點如下:

(1)基類的公有成員和保護類型成員在派生類中為保護成員。

(2)基類的私有成員在派生類中不能被直接訪問。


可以看的出來,派生類里的成員函數(shù)可以訪問基類的公有成員和保護成員,但在類外通過派生類對象則無法訪問它們。同樣,無論派生類里的成員函數(shù)還是通過類對象都無法訪問基類中的私有成員。


下面還是以時鐘和鬧鐘的程序代碼為例,實驗基類中不同類型通過不同權(quán)限派生的訪問問題。對于公有類型,無論在派生類的成員方法里還是類外都可以調(diào)用,編譯無錯運行如下:

C++三種繼承方式


但對于私有成員,我們試圖增加一行代碼見41行。在派生類的成員函數(shù)中對吸收來自基類的H變量進行賦值,編譯得到報錯,見紅色方框與下方提示:

C++三種繼承方式


可以看到錯誤信息“H為私有類型”。


而對于受保護類型的,我們嘗試在基類中定義一個protected類型的變量w,并試圖在公有繼承的派生類方法中賦值使用,可以看到下圖的情況,完全可以訪問。如下圖:

C++三種繼承方式


對于私有繼承,公開類型的成員在類外訪問情況:

C++三種繼承方式


大家可以自行上機實驗,驗證不同類型成員在公有繼承下的訪問情況。


學(xué)習(xí)并實驗過后,我們可以總結(jié)如下:

1. 基類私有成員,無論什么派生權(quán)限,派生類內(nèi)成員函數(shù)和類外都是不可以訪問的。

2. 私有繼承,無論基類原來什么類型,在派生類外通過成員函數(shù)都不可以訪問。

3. 派生類從基類中吸收的成員的訪問權(quán)限為基類中訪問權(quán)限和派生時派生權(quán)限兩者之中最低的一種。


并根據(jù)派生的權(quán)限、基類中定義的權(quán)限,在派生類的類內(nèi)和類外不同訪問時的組合情況,列出下表:


公有繼承保護繼承私有繼承
訪問位置類內(nèi)類外類內(nèi)類外類內(nèi)類外
公有成員可以可以可以不可以可以不可以
保護成員可以不可以可以不可以可以不可以
私有成員不可以不可以不可以不可以不可以不可以


點贊(1)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)