Freigeben über


Zugriffsspezifizierer für Basisklassen

Steuerelement mit zwei Faktoren, die Member einer Basisklasse in einer abgeleiteten Klasse zugegriffen werden kann. Zugriff dieser Faktoren derselbe Steuerelements auf geerbte Member in der abgeleiteten Klasse:

  • Ob die abgeleitete Klasse die Basisklasse mit dem ÖffentlichHEAD Klasse in ZugriffsspezifizierersHEAD Klasse deklariert (in Klassentypen definiert werdenGrammatik wird im Abschnitt beschrieben).

  • Was der Zugriff auf den Member in der Basisklasse ist.

In der folgenden Tabelle wird die Interaktion zwischen diesen Faktoren auf, und wie Sie Zugriff auf Basisklassenmember bestimmt.

Member-Zugriff in der Basisklasse

private

protected

Public

Rufen Sie unabhängig von den Zugriff Ableitungs nicht zugegriffen werden kann

Privat in der abgeleiteten Klasse, wenn Sie einen privaten Ableitung verwenden

Privat in der abgeleiteten Klasse, wenn Sie einen privaten Ableitung verwenden

 

Geschützt in der abgeleiteten Klasse, wenn Sie verwenden die Ableitung geschützte

Geschützt in der abgeleiteten Klasse, wenn Sie verwenden die Ableitung geschützte

 

Geschützt in der abgeleiteten Klasse, wenn Sie öffentliche Ableitung verwenden

Öffentlich in der abgeleiteten Klasse, wenn Sie öffentliche Ableitung verwenden

Dies wird anhand des folgenden Beispiels veranschaulicht:

// access_specifiers_for_base_classes.cpp
class BaseClass
{
public:
    int PublicFunc();    // Declare a public member.
protected:
    int ProtectedFunc(); // Declare a protected member.
private:
    int PrivateFunc();   // Declare a private member.
};

// Declare two classes derived from BaseClass.
class DerivedClass1 : public BaseClass
{
};

class DerivedClass2 : private BaseClass
{
};

int main()
{
}

In DerivedClass1ist die Memberfunktion PublicFunc ein öffentlicher Member und ProtectedFunc ist ein geschützter Member, da eine öffentliche BaseClass Basisklasse ist.PrivateFunc ist mit BaseClassprivat, und es ist keine abgeleiteten Klassen zugegriffen werden.

In DerivedClass2betrachtet werden die Funktionen PublicFunc und ProtectedFunc als private Member, da BaseClass eine private Basisklasse ist.Auch hier ist PrivateFunc zu BaseClassprivat, und es ist keine abgeleiteten Klassen zugegriffen werden.

Sie können eine abgeleitete Klasse ohne einen Basisklassenzugriffsspezifizierer deklarieren.In einem solchen Fall gilt die Ableitung als privat, wenn die Deklaration der abgeleiteten Klasse das Klasse-Schlüsselwort verwendet.Die Ableitung wird als public, wenn die Deklaration der abgeleiteten Klasse das struct-Schlüsselwort verwendet.Folgender Code z. B.:

class Derived : Base
...

identisch mit folgendem Ausdruck:

class Derived : private Base
...

Entsprechend der folgenden Code:

struct Derived : Base
...

identisch mit folgendem Ausdruck:

struct Derived : public Base
...

Beachten Sie, dass die Member, die deklariert werden, als seien ihre privaten Zugriff auf die nicht zugegriffen werden, sind Funktionen oder abgeleiteten Klassen, es sei denn, diese Funktionen oder Klassen unter Verwendung der friend Deklaration in der Basisklasse deklariert werden.

Ein Union-Typ kann keine Basisklasse haben.

HinweisHinweis

Wenn Sie eine private Basisklasse angeben, ist es ratsam, das Schlüsselwort private , sodass die Benutzer der abgeleiteten Klassenkonstruktor explizit zu verwendende verstehen Sie den Memberzugriff.

Siehe auch

Referenz

Zugriffssteuerung