共用方式為


存取控制和靜態成員

當您將基底類別指定為 private 時,只會影響到非靜態成員。 在衍生類別中仍然可以存取公用的靜態成員。 不過,使用指標、參考或物件存取基底類別的成員可能需要進行轉換,此時會重新套用存取控制。 參考下列範例:

// access_control.cpp
class Base
{
public:
    int Print();             // Nonstatic member.
    static int CountOf();    // Static member.
};

// Derived1 declares Base as a private base class.
class Derived1 : private Base
{
};
// Derived2 declares Derived1 as a public base class.
class Derived2 : public Derived1
{
    int ShowCount();    // Nonstatic member.
};
// Define ShowCount function for Derived2.
int Derived2::ShowCount()
{
   // Call static member function CountOf explicitly.
    int cCount = Base::CountOf();     // OK.

   // Call static member function CountOf using pointer.
    cCount = this->CountOf();  // C2247. Conversion of
                               //  Derived2 * to Base * not
                               //  permitted.
    return cCount;
}

在上述程式碼中,存取控制項禁止從 Derived2 的指標轉換為 Base 的指標。 this 指標可以隱含轉換為 Derived2 * 類型。 若要選取 CountOf 函式,必須將 this 轉換為 Base * 類型。 由於 Base 是 Derived2 的私用間接基底類別,因此不允許進行這類轉換。 只有直接衍生類別的指標可以轉換為私用的基底類別類型。 因此,Derived1 * 類型的指標可以轉換成 Base * 類型。

請注意,明確呼叫 CountOf 函式,而不使用指標、參考或物件加以選取,表示沒有進行轉換。 因此,可以進行呼叫。

衍生類別的成員和 friend (即 T) 可以將 T 的指標轉換為 T 的私用直接基底類別的指標。

請參閱

參考

基底類別的存取規範