C++派生類成員的訪問屬性


既然派生類中包含基類成員和派生類自己增加的成員,就產生了這兩部分成員的關系和訪問屬性的問題。在建立派生類的時候,並不是簡單地把基類的私有成員直接作為派生類的私有成員,把基類的公用成員直接作為派生類的公用成員。


實際上,對基類成員和派生類自己增加的成員是按不同的原則處理的。具體說,在討論訪問屬性時,要考慮以下幾種情況:

  1. 基類的成員函數訪問基類成員。
  2. 派生類的成員函數訪問派生類自己增加的成員。
  3. 基類的成員函數訪問派生類的成員。
  4. 派生類的成員函數訪問基類的成員。
  5. 在派生類外訪問派生類的成員。
  6. 在派生類外訪問基類的成員。


對於第(1)和第(2)種情況,比較簡單,基類的成員函數可以訪問基類成員,派生類的成員函數可以訪問派生類成員。私有數據成員只能被同一類中的成員函數訪問,公用成員可以被外界訪問。


第(3)種情況也比較明確,基類的成員函數只能訪問基類的成員,而不能訪問派生類的成員。


第(5)種情況也比較明確,在派生類外可以訪問派生類的公用成員,而不能訪問派生類的私有成員。


對於第(4)和第(6)種情況,就稍微復雜一些,也容易混淆。譬如,有人提出這樣的問題:

  • 基類中的成員函數是可以訪問基類中的任一成員的,那么派生類中新增加的成員是否可以同樣地訪問基類中的私有成員;
  • 在派生類外,能否通過派生類的對象名訪問從基類繼承的公用成員。


這些牽涉到如何確定基類的成員在派生類中的訪問屬性的問題,不僅要考慮對基類成員所聲明的訪問屬性,還要考慮派生類所聲明的對基類的繼承方式,根據這兩個因素共同決定基類成員在派生類中的訪問屬性。


前面已提到,在派生類中,對基類的繼承方式可以有public(公用的)、private (私有的)和protected(保護的)3種。不同的繼承方式決定了基類成員在派生類中的訪問屬性。簡單地說可以總結為以下幾點。


1) 公用繼承(public inheritance)
基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員仍為基類私有。


2) 私有繼承(private inheritance)
基類的公用成員和保護成員在派生類中成了私有成員,其私有成員仍為基類私有。


3) 受保護的繼承(protected inheritance)
基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有。保護成員的意思是,不能被外界引用,但可以被派生類的成員引用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM