Ü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:

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 privateAbschnitten 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

Klassen und Strukturen