Übersicht über Klassenmember
A class
oder struct
besteht aus seinen Mitgliedern. Die von einer Klasse ausgeführte Arbeit erfolgt über die Memberfunktionen. Den Zustand, den sie verwaltet, wird in Datenmembern gespeichert. Die Initialisierung von Membern erfolgt durch Konstruktoren, und sauber Up-Arbeit wie das Freigeben von Arbeitsspeicher und das Freigeben von Ressourcen erfolgt durch Destruktoren. In C++11 und höher können Datenmember (und sollten in der Regel) beim Deklarieren initialisiert werden.
Typen von Klassenmembern
Eine vollständige Liste der Memberkategorien finden Sie im Folgenden:
Veränderbare und statische Datenmember, einschließlich integrierter Typen und anderer benutzerdefinierter Typen.
Operatoren
-
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.
Beispiel für eine Klassendeklaration
Im folgenden Beispiel wird eine einfache Klassendeklaration dargestellt:
// TestRun.h
class TestRun
{
// Start member list.
// The class interface accessible to all callers.
public:
// Use compiler-generated default constructor:
TestRun() = default;
// Don't generate a copy constructor:
TestRun(const TestRun&) = delete;
TestRun(std::string name);
void DoSomething();
int Calculate(int a, double d);
virtual ~TestRun();
enum class State { Active, Suspended };
// Accessible to this class and derived classes only.
protected:
virtual void Initialize();
virtual void Suspend();
State GetState();
// Accessible to this class only.
private:
// Default brace-initialization of instance members:
State _state{ State::Suspended };
std::string _testName{ "" };
int _index{ 0 };
// Non-const static member:
static int _instances;
// End member list.
};
// Define and initialize static member.
int TestRun::_instances{ 0 };
Memberzugriff
Die Member einer Klasse werden in der Memberliste deklariert. Die Memberliste einer Klasse kann in eine beliebige Anzahl von private
Abschnitten unterteilt werden, protected
wobei public
Schlüsselwort (keyword) als Zugriffsbezeichner bezeichnet werden. Ein Doppelpunkt :
muss dem Zugriffsbezeichner folgen. Diese Abschnitte müssen nicht zusammenhängend sein; d. h., eines dieser Schlüsselwort (keyword) kann mehrmals in der Mitgliederliste angezeigt werden. Das Schlüsselwort legt den Zugriff aller Member bis zum nächsten Zugriffsspezifizierer oder zur schließenden Klammer fest. Weitere Informationen finden Sie unter Memberzugriffssteuerung (C++).
Statische Member
Ein Datenmember kann als statisch deklariert werden, was bedeutet, dass alle Objekte der Klasse auf die gleiche Kopie zugreifen. Eine Memberfunktion kann als statisch deklariert werden, in diesem Fall kann sie nur auf statische Datenmember der Klasse zugreifen (und hat keinen this
Zeiger). Weitere Informationen finden Sie unter "Static Data Members".
Spezielle Memberfunktionen
Spezielle Memberfunktionen sind Funktionen, die der Compiler automatisch bereitstellt, wenn Sie sie nicht im Quellcode angeben.
Standardkonstruktor
Kopierkonstruktor
(C++11) Konstruktor verschieben
Kopierzuweisungsoperator
(C++11) Zuweisungsoperator verschieben
Destruktor
Weitere Informationen finden Sie unter "Spezielle Memberfunktionen".
Elementweise Initialisierung
Nicht statische Memberdeklaratoren können in C++11 und höher Initialisierer enthalten.
class CanInit
{
public:
long num {7}; // OK in C++11
int k = 9; // OK in C++11
static int i = 9; // Error: must be defined and initialized
// outside of class declaration.
// initializes num to 7 and k to 9
CanInit(){}
// overwrites original initialized value of num:
CanInit(int val) : num(val) {}
};
int main()
{
}
Wenn einem Element ein Wert in einem Konstruktor zugewiesen wird, überschreibt dieser Wert den bei der Deklaration zugewiesenen Wert.
Es gibt nur eine freigegebene Kopie statischer Datenmember für alle Objekte eines bestimmten Klassentyps. Statische Datenmember müssen definiert werden und können im Dateigültigkeitsbereich initialisiert werden. Weitere Informationen zu elementen statischer Daten finden Sie unter "Static data members". Das folgende Beispiel zeigt, wie statische Datenmmber initialisiert werden:
// class_members2.cpp
class CanInit2
{
public:
CanInit2() {} // Initializes num to 7 when new objects of type
// CanInit are created.
long num {7};
static int i;
static int j;
};
// At file scope:
// i is defined at file scope and initialized to 15.
// The initializer is evaluated in the scope of CanInit.
int CanInit2::i = 15;
// The right side of the initializer is in the scope
// of the object being initialized
int CanInit2::j = i;
Hinweis
Dem Klassennamen CanInit2
muss i
vorausgehen, um anzugeben, dass das definierte i
ein Member der Klasse CanInit2
ist.
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für