Initialisieren von Memberobjekten
Klassen können Memberobjekte des Klassentyps enthalten, um jedoch sicherzustellen, dass die Initialisierungsanforderungen für Memberobjekte erfüllt werden, muss eine der folgenden Bedingungen zutreffen:
Die Klasse des enthaltenen Objekts erfordert keinen Konstruktor.
Die Klasse des enthaltenen Objekts hat einen zugreifbaren Standardkonstruktor.
Die Konstruktoren der enthaltenden Klasse initialisieren alle explizit das enthaltene Objekt.
Das folgende Beispiel veranschaulicht, wie diese Initialisierung durchgeführt wird:
// spec1_initializing_member_objects.cpp
// Declare a class Point.
class Point
{
public:
Point( int x, int y ) { _x = x; _y = y; }
private:
int _x, _y;
};
// Declare a rectangle class that contains objects of type Point.
class Rect
{
public:
Rect( int x1, int y1, int x2, int y2 );
private:
Point _topleft, _bottomright;
};
// Define the constructor for class Rect. This constructor
// explicitly initializes the objects of type Point.
Rect::Rect( int x1, int y1, int x2, int y2 ) :
_topleft( x1, y1 ), _bottomright( x2, y2 )
{
}
int main()
{
}
Die im vorherigen Beispiel dargestellte Rect-Klasse enthält zwei Memberobjekte der Point-Klasse. Ihr Konstruktor initialisiert die _topleft- und _bottomright-Objekte explizit. Ein Doppelpunkt steht hinter der schließenden Klammer des Konstruktors (in der Definition). Hinter dem Doppelpunkt werden die Membernamen und -argumente aufgeführt, mit denen die Objekte des Typs Point initialisiert werden.
Hinweis
Die Reihenfolge, in der die Memberinitialisierer im Konstruktor angegebenen werden, wirkt sich nicht auf die Reihenfolge aus, in der die Member erstellt werden. Die Member werden der Reihenfolge erstellt, in der sie in der Klasse deklariert werden.
Verweisobjekte und const-Memberobjekte müssen mithilfe der Memberinitialisierungssyntax initialisiert werden, die im Grammatikabschnitt unter Initialisieren von Basen und Membern erläutert wird. Es gibt keine andere Möglichkeit zum Initialisieren dieser Objekte.