一、訪問權限問題
在C++中的訪問權限共有三種,分別為public、private、protected:
一般地,在類的內部,無論成員被聲明為哪種,都是可以互相訪問的;但在類的外部,如通過類的對象,則只能訪問 public 屬性的成員,不能訪問protected、private屬性的成員,注意這句話!無論是什么權限申明,類中任意權限申明的函數都可以訪問。
【何為內部訪問,內部訪問是指類的內部函數(無論是公有、私有還是保護均可)對該類中各個訪問權限的數據的訪問】
class A { public: int a; private: int b; //即使是在私有區中的內部函數仍可以訪問類中的各個申明權限中的數據 int B() { a; b; c; } protected: int c; };
【在類中默認使用private權限訪問】
二、關於保護(protected)權限說明
對於protected權限而言,如果不涉及類的繼承,那么protected與private權限地位一摸一樣並且毫無區別
三、繼承方式
對於類內的訪問(類中各個函數的訪問,無論何種權限申明方式均可)而言,除了屏蔽區,其他的數據隨意訪問;對於類外的對象實例的數據調用,只能調用當前類的公有區的數據
在正式說類的繼承方式之前我們需要提前了解,實際在一個類中我們可以將其分成四個部分,分別是公有區、私有區、保護區、屏蔽區。
公有繼承:
基類的公有數據繼承為派生類的公有數據;基類的私有數據繼承到派生類的屏蔽區;基類的保護數據繼承為派生類的保護數據;基類的屏蔽區數據繼承到派生類的屏蔽區
結論(只談論派生類對基類的訪問情況):因此在公有繼承中,派生類的內部可以訪問基類的公有數據(派生類的公有數據)和保護數據(派生類的保護數據),派生類的外部可以訪問基類的公有數據(派生類的公有數據)
私有繼承:
基類的公有數據繼承為派生類的私有數據;基類的私有數據繼承到派生類的屏蔽區;基類的保護數據繼承為派生類的私有數據;基類的屏蔽區數據繼承到派生類的屏蔽區
結論(只談論派生類對基類的訪問情況):因此在公有繼承中,派生類的內部可以訪問基類的公有數據(派生類的私有數據)和基類的保護數據(派生類的私有數據),派生類的外部不能訪問基類的任何數據
保護繼承:
基類的公有數據繼承為派生類的保護數據;基類的私有數據繼承到派生類的屏蔽區;基類的保護數據繼承為派生類的保護數據;基類的屏蔽區數據繼承到派生類的屏蔽區
結論(只談論派生類對基類的訪問情況):因此在保護繼承中,派生類的內部可以訪問基類的公有數據(派生類的保護數據)和基類的保護數據(派生類的保護數據),派生類的外部不能訪問基類的任何數據
注意:無論是什么方式的繼承,父類的除了構造函數、復制構造、析構函數,其余的所有數據(包括私有和保護)都會被繼承過來,只不過存在能否訪問的問題