共用方式為


基底類別的存取規範

兩個因素控制項在哪一個成員的基底類別中存取屬於衍生的類別。 這些相同的因素來控制存取衍生類別中繼承的成員:

  • 在衍生的類別是否宣告基底類別使用公用 存取規範中的 類別標頭 (類別標頭 的文法檢查 」 一節中所述 定義的類別型別)。

  • 存取該成員是什麼基底類別中。

下表顯示這些因素,以及如何決定基底類別成員的存取權限之間的互動。

基底類別中的成員存取

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關鍵字讓衍生類別的使用者了解成員存取。

請參閱

參考

成員存取控制