Sdílet prostřednictvím


Řízení přístupu a statické členy

Pokud zadáte základní třídu jako private, ovlivní to pouze nestatické členy.Veřejné statické členy jsou v odvozených třídách stále přístupné.Avšak přístup ke členům základní třídy pomocí ukazatelů, odkazů nebo objektů může vyžadovat převod, kdy je řízení přístupu znovu použito.Příklad:

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

V předchozím kódu řízení přístupu zakazuje převod z ukazatele na typ Derived2 na ukazatele na typ Base.Ukazatel this je implicitně typu Derived2 *.Chcete-li vybrat funkci CountOf, musí být ukazatel this převeden na typ Base *.Takový převod není povolen, protože typ Base je privátní nepřímá základní třída typu Derived2.Převod na typ soukromé základní třídy je přijatelný pouze pro ukazatele na přímé odvozené třídy.Proto lze ukazatele typu Derived1 * převést na typ Base *.

Všimněte si, že explicitní volání funkce CountOf, bez použití ukazatele, odkazu nebo objektu, neprovede žádný převod.Proto je toto volání povoleno.

Členové a přátelé odvozené třídy, T, mohou převést ukazatele na typ T na ukazatele na přímou soukromou základní třídu typu T.

Viz také

Referenční dokumentace

Přístup ke specifikátorům pro třídy Base