分類(四類訪問)
類的作用域運算
小結why public?
結論當類的繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而基類的私有成員在派生類中不可訪問。即基類的公有成員和保護成員被繼承到派生類中仍作為派生類的公有成員和保護成員。派生類的其他成員可以直接訪問它們。無論派生類的成員還是派生類的物件都無法訪問基類的私有成員。
保護繼承中,基類的公有成員和保護成員都以保護成員的身份出現在派生類中,而基類的私有成員不可訪問。派生類的其他成員可以直接訪問從基類繼承來的公有和保護成員,但是類外部通過派生類的物件無法訪問它們,無論派生類的成員還是派生類的物件,都無法訪問基類的私有成員。
當類的繼承方式為私有繼承時,基類中的公有成員和保護成員都以私有成員身份出現在派生類中,而基類的私有成員在派生類中不可訪問。基類的公有成員和保護成員被繼承後作為派生類的私有成員,派生類的其他成員可以直接訪問它們,但是在類外部通過派生類的物件無法訪問。無論是派生類的成員還是通過派生類的物件,都無法訪問從基類繼承的私有成員。通過多次私有繼承後,對於基類的成員都會成為不可訪問。因此私有繼承比較少用。
公有成員;保護成員;私有成員;不可訪問的成員;
#
include
using
namespace std;
class
base
;class
drive
:public
base};
intmain()
上面**編譯器會報錯:
如果某派生類的多個基類擁有同名的函式成員或者資料成員,同時派生類又新增這樣的同名成員,在這種情況下,派生類成員將 shadow(隱藏)所有基類的同名成員。這時就需要基類名+作用域運算子的方式才能呼叫基類的同名成員。
#
include
using
namespace std;
class
base};
class
drive
:public
base};
intmain()
執行結果為:
shadow在父子類**現了同名的識別符號(函式成員,資料成員),就會構成shadow現象,如果想要訪問被shadow的成員,加上父類的命名空間。shadow的條件只有乙個就是重名。
所有繼承必須是 public 的,如果想私有繼承的話,應該採用將基類例項作為成員的方式作為替代。(引自 google c++ 程式設計規範)。
;如果多級派生當中,均採用 public,直到最後一級,派生類中均可訪問基類的public,protected 成員。
如果多級派生當中,均採用 protected,直到最後一級,派生類的基類的所有成員即使可見,也均不可被類外呼叫。
如果多級派生當中,均採用 private,直到最後一級,派生類中基類的所有成員均變為不可見。上面**中給出不用傳遞到最後一級,直接下一級派生類中基類的所有成員就已經變為不可見。
綜上所述,記住 public 繼承足矣。
使用第三類方庫,比如 qt,往往遵循這樣乙個原則,先繼承,後新增新元素,體現子類的個性需求。
繼承–>組合–>使用
#
ifndef
mainwindow_h
#define
mainwindow_h
#include
class
mainwindow
:public
/protected
/private
qmainwindow
;class
mywindow
:private
mainwindow};
#endif
// mainwindow_h
qmainwindow 是 qt 框架,中的乙個視窗 widget,通常情況下會對其採用先繼承的方式,然後再新增成員的組合方式來使用,如果,不採用 public 繼承,後繼工作將無法開展。 C 繼承和派生類
繼承和派生類 繼承性是物件導向程式設計中最重要的機制。這種機制提供了無限重複利用程式資源的一種途徑。通過c 語言中的繼承機制,可以擴充和完善舊的程式設計以適應新的需求。這樣不僅可以節省程式開發的時間和資源,並且為未來程式增添了新的資源。class student class studend1 利用原...
C 學習筆記 類的繼承(派生類)
1 引言 馬克思說 世界是聯絡的,哈哈。搞笑了。進入正題,現實中的乙個概念不是鼓勵存在的,總是與一些相關的概念存在的,他們之間總是相互聯絡的,而且他們之間會表現出一種層次的關係,共性 層次 我們就引出了派生類的概念。2 派生類 1 employee與manager struct employee s...
繼承和派生類
一 基本概念 繼承是物件導向的程式設計的重要特色之一,它可以有效提高軟體的重用性。若在已有類a的基礎上建立了乙個新類b,則稱類b繼承了類a,類a稱為基類或父類,類b稱為派生類或子類。c 中,繼承又分單一繼承和多重繼承。若派生類只有乙個基類,則稱為單一繼承 若派生類的基類多於乙個,則稱為多重繼承。1 ...