Klassenmember
Klassen können diese Arten von Membern aufweisen:
Klassen; dazu zählen Klassen, Strukturen und Unions (siehe Geschachtelte Klassendeklarationen und Unions)
-
Hinweis
Friends sind in der vorangehenden Liste inbegriffen, da sie in der Klassendeklaration enthalten sind.Es sind jedoch keine echten Klassenmember, da sie nicht im Gültigkeitsbereich der Klasse liegen.
Hinweise
Die Memberliste einer Klasse kann mithilfe von Schlüsselwörtern, die als Zugriffsspezifizierer bekannt sind, in private-, protected- und public-Abschnitte unterteilt werden. Ein Doppelpunkt : muss dem Zugriffsspezifizierer folgen. Diese Abschnitte müssen nicht fortlaufend sein, d. h. sämtliche dieser Schlüsselwörter können möglicherweise mehrmals in der Memberliste vorkommen. Das Schlüsselwort legt den Zugriff aller Member bis zum nächsten Zugriffsspezifizierer oder zur schließenden Klammer fest.
Memberdeklarationen in der Memberliste werden durch Semikolons ; getrennt. Weitere Informationen erhalten Sie unter Class-Member-Deklarationssyntax.
Der Zweck der Memberliste ist:
Deklarieren des vollständigen Satzes von Membern für eine bestimmte Klasse
Spezifizieren des Zugriffs (öffentlich, privat oder geschützt), der verschiedenen Klassenmembern zugeordnet ist
In der Deklaration einer Memberliste können Sie Member nur einmal deklarieren. Eine Neudeklaration von Membern erzeugt eine Fehlermeldung. Da die Memberliste ein vollständiger Satz der Member ist, können Sie einer gegebenen Klasse mit nachfolgenden Klassendeklarationen keine Member hinzufügen.
Memberdeklaratoren können keine Initialisierer enthalten. Die Bereitstellung eines Initialisierers erzeugt eine Fehlermeldung, wie im folgenden Code gezeigt:
// class_members1.cpp
// C2864 expected
class CantInit
{
public:
long l = 7; // Error: attempt to initialize
// class member.
static int i = 9; // Error: must be defined and initialized
// outside of class declaration.
};
int main()
{
}
Da eine separate Instanz von nicht statischen Memberdaten für jedes Objekt eines gegebenen Klassentyps erstellt wird, ist die richtige Vorgehensweise zum Initialisieren von Memberdaten die Verwendung des Klassenkonstruktors. (Konstruktoren werden unter Konstruktoren behandelt.)
Es ist nur eine gemeinsame Kopie der statischen Datenmember für alle Objekte eines gegebenen Klassentyps vorhanden. Statische Datenmember müssen definiert werden und können im Dateigültigkeitsbereich initialisiert werden. (Weitere Informationen zu statischen Datenmembern finden Sie unter Statische Datenmember). Das folgende Beispiel veranschaulicht, wie diese Initialisierungen vorgenommen werden:
// class_members2.cpp
class CanInit
{
public:
CanInit() { l = 7; } // Initializes l when new objects of type
// CanInit are created.
long l;
static int i;
static int j;
};
// i is defined at file scope and initialized to 15.
// The initializer is evaluated in the scope of CanInit.
int CanInit::i = 15;
// The right side of the initializer is in the scope
// of the object being initialized
int CanInit::j = i;
int main()
{
}
Hinweis
Dem Klassennamen CanInit muss i vorausgehen, um anzugeben, dass das definierte i ein Member der Klasse CanInit ist.
Microsoft-spezifisch
Mit Microsoft C++ können "static"-, "const integral"- und "const enum"-Datenmember in der Klassendefinition initialisiert werden. Weitere Informationen erhalten Sie unter Microsoft-Erweiterungen für C und C++.