Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie eine Basisklasse als privateangeben, wirkt sich dies nur auf nicht statische Member.Öffentlich statischen Member sind noch in abgeleiteten Klassen zugegriffen werden.Die Member der Basisklasse mithilfe der Zeiger können den Zugriff auf die Objekte Verweise oder eine Konvertierung erfordern, wenn die Zugriffssteuerung wird erneut übernommen.Betrachten Sie das folgende Beispiel:
// 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;
}
Im vorherigen Code verhindert, dass sowohl der Konvertierung von einem Zeiger auf Derived2 in einen Zeiger auf Base.Der dies Zeiger ist implizit vom Typ Derived2 *.Um die CountOf-Funktion auszuwählen, muss dies konvertiert werden Base *einzugeben.Eine solche Konvertierung ist nicht zulässig, da Base eine private indirekte Basisklasse zu Derived2ist.Konvertierung in einen privaten Typ der Basisklasse ist nur für Zeiger für die direkte Verwendung durch abgeleitete Klassen verwendet werden.Daher können Zeiger vom Typ Derived1 * konvertiert werden, um Base *einzugeben.
Beachten Sie, dass die CountOf-Funktion zu verwenden, ohne explizit einen Zeiger aufrufen oder Verweis bedeutet Objekt, um ihn auszuwählen, keine Konvertierung.Daher wird der Aufruf zugelassen.
Member und Freunde einer abgeleiteten Klasse Tkönnen einen Zeiger auf T in einen Zeiger auf eine private direkten Basisklasse Tkonvertieren.