Initialisieren von Memberobjekten
Klassen können Memberobjekte des Klassentyps enthalten, aber sicherstellen, dass die Anforderungen für die Initialisierung Memberobjekte erfüllt werden, muss eine der folgenden Bedingungen erfüllt sind:
Der Objektklasse enthaltenes erfordert keinen Konstruktor.
Der Objektklasse enthaltenes verfügt über einen zugreifbaren Standardkonstruktor.
Alle enthaltenen der Klasse explizit Konstruktoren initialisieren das enthaltende Objekt.
Im folgenden Beispiel wird gezeigt, wie eine solche Initialisierung ausführt:
// 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 Rect-Klasse im vorherigen Beispiel gezeigt, enthält zweiköpfige Objekte der Klasse Point.Dieser Konstruktor initialisiert die Objekte explizit _topleft und _bottomright.Beachten Sie, dass ein Doppelpunkt der schließenden Klammer des Konstruktors entspricht (in der Definition).Der Doppelpunkt wird durch den Membernamen und Argumenten befolgt, mit denen die Objekte vom Typ Pointinitialisieren.
Hinweis |
---|
Die Reihenfolge, in der die Member initialisierer des Konstruktors angegeben werden, wirkt sich nicht auf die Reihenfolge, in der die Member erstellt werden. Member werden in der Reihenfolge erstellt, in der sie in der Klasse deklariert werden. |
Verweis- und const-Memberobjekte müssen mithilfe der Attributsyntax Initialisieren Member initialisiert werden, die im Grammatik im Abschnitt Initialisieren von Membern und Basisklassenangezeigt wird.Es gibt keine andere Möglichkeit, diese Objekte zu initialisieren.