Sdílet prostřednictvím


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

Pokud zadáte základní třídy jako private, ovlivní pouze nestatické členy.Veřejné statické členy jsou stále přístupné v odvozené třídy.Přístup k členům základní třídy pomocí ukazatelů, odkazy nebo objekty můžete požadovat převod, po kterém znovu použít řízení přístupu.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ředcházejícím kódu řízení přístupu zakazuje převod z ukazatele na Derived2 na ukazatel na Base.Této ukazatel je implicitně typu Derived2 *.Vyberte CountOf funkce této musí převést na typ Base *.Takový převod není povolen, protože Base je privátní nepřímé základní třídy na Derived2.Převod typu soukromé základní třídy je přijatelný pouze pro ukazatele na okamžité odvozené třídy.Proto ukazatele typu Derived1 * můžete převést na typ Base *.

Všimněte si, že volání CountOf funkce explicitně, bez použití ukazatele, odkaz nebo objekt, vyberte jej, znamená žádný převod.Proto volání povoleno.

Členové a přátelé odvozené třídy T, můžete převést ukazatel na T na ukazatel pro soukromé Přímá základní třída u T.

Viz také

Referenční dokumentace

Specifikátory přístupu pro základní třídy