基底類別的存取規範
兩個因素控制項在哪一個成員的基底類別中存取屬於衍生的類別。 這些相同的因素來控制存取衍生類別中繼承的成員:
在衍生的類別是否宣告基底類別使用公用 存取規範中的 類別標頭 (類別標頭 的文法檢查 」 一節中所述 定義的類別型別)。
存取該成員是什麼基底類別中。
下表顯示這些因素,以及如何決定基底類別成員的存取權限之間的互動。
基底類別中的成員存取
private |
protected |
Public |
---|---|---|
永遠無法存取,無論衍生的存取 |
如果您使用私用衍生的衍生類別中的私用 |
如果您使用私用衍生的衍生類別中的私用 |
|
在衍生類別中受到保護,如果您使用受保護的衍生 |
在衍生類別中受到保護,如果您使用受保護的衍生 |
|
如果您使用公用衍生,衍生類別中保護 |
如果您使用公用衍生的衍生類別中的公用 |
下面這個範例可說明這點:
// access_specifiers_for_base_classes.cpp
class BaseClass
{
public:
int PublicFunc(); // Declare a public member.
protected:
int ProtectedFunc(); // Declare a protected member.
private:
int PrivateFunc(); // Declare a private member.
};
// Declare two classes derived from BaseClass.
class DerivedClass1 : public BaseClass
{
};
class DerivedClass2 : private BaseClass
{
};
int main()
{
}
在DerivedClass1,成員函式PublicFunc是公用的成員和ProtectedFunc是受保護的成員,因為BaseClass是公用的基底類別。 PrivateFunc為私用BaseClass,和任何衍生類別無法存取。
在DerivedClass2,函式PublicFunc和ProtectedFunc被視為私用成員,因為BaseClass是私用的基底類別。 同樣地, PrivateFunc是專屬於BaseClass,和任何衍生類別無法存取。
您可以宣告衍生的類別,而不是基底類別的存取規範。 在此情況下,衍生視為如果衍生的類別宣告使用私用類別關鍵字。 衍生將視為如果衍生的類別宣告使用struct關鍵字。 例如,下列程式碼:
class Derived : Base
...
等於:
class Derived : private Base
...
同樣地,下列程式碼:
struct Derived : Base
...
等於:
struct Derived : public Base
...
請注意宣告為具有私用存取的成員不可以存取函式或衍生類別,除非這些函式或類別宣告使用friend基底類別中的宣告。
A 等位型別不能有基底類別。
注意事項 |
---|
當指定私用的基底類別,最好也能明確地使用private關鍵字讓衍生類別的使用者了解成員存取。 |