Aracılığıyla paylaş


Erişim denetimi ve Static üyeler

Temel bir sınıf olarak belirtirken private, yalnızca başvuramaz üyelerini etkiler.Public static üyeler türetilmiş sınıflarda hala erişilebilir.Ancak, işaretçileri, başvurular ya da nesneleri kullanarak temel sınıf üyesi erişme hangi sırada yeniden erişim denetimi uygulanması bir dönüştürme zorunlu kılabilirsiniz.Aşağıdaki örneği inceleyin:

// 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;
}

Önceki kodda, erişim denetimi için bir işaretçi dönüştürme yasaklar Derived2 için bir işaretçi Base.Bu işaretçi türü örtülü olarak ise Derived2 *.Seçmek için CountOf işlevi, Bu yazın dönüştürülmelidir Base *.Bu tür bir dönüşümü nedeniyle izin verilmeyen Base için özel dolaylı temel sınıfı olan Derived2.Özel temel sınıf türü dönüştürme yalnızca hemen türetilmiş sınıflar için işaretçiler için kabul edilebilir.Bu nedenle, işaretçiler türü Derived1 * yazmak için dönüştürülmüş Base *.

Bu arama Not CountOf işlevini açık olarak, işaretçi, başvuru veya nesneyi seçmek için kullanmadan anlaşılacağı dönüştürme.Bu nedenle, arama izin verilir.

Üyeleri ve türetilmiş bir sınıf arkadaşların T, bir işaretçi dönüştürebilirsiniz T için özel bir doğrudan temel sınıfın bir işaretçi T.

Ayrıca bkz.

Başvuru

Temel sınıflar için erişim belirticileri