Inicjowanie obiektu elementu członkowskiego
Klasy mogą zawierać obiekty członkowskie typu klasy, ale w celu zapewnienia, że spełnione są wymagania inicjowania dla obiektów członkowskich, jeden z następujących warunków musi być spełniony:
Klasa obiektu zawieranego wymaga braku konstruktora.
Klasa obiektu zawieranego ma dostępny domyślny konstruktor.
Wszystkie konstruktory zawieranej klasy jawnie inicjują zawierany obiekt.
Poniższy przykład pokazuje sposób wykonywania takiego inicjowania:
// 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()
{
}
Klasa Rect, pokazana w poprzednim przykładzie zawiera dwa obiekty członkowskie klasy Point.Jej konstruktor jawnie inicjuje obiekty _topleft i _bottomright.Należy zauważyć, że dwukropek następuje po nawiasie zamykającym konstruktora (w definicji).Po dwukropku następują nazwy elementów członkowskich i argumenty, za pomocą których obiekty typu Point mają być zainicjowane.
[!UWAGA]
Kolejność, w której inicjalizatory elementów członkowskich są określane w konstruktorze nie wpływają na kolejność, w której elementy członkowskie są wykonane; elementy członkowskie są budowane w kolejności, w której są zadeklarowane w klasie.
Odwołanie i obiekty członkowskie const muszą zostać zainicjowane przy użyciu składni inicjowania elementów członkowskich pokazanej w sekcji Gramatyka w Inicjowanie baz i elementów członkowskich.Nie istnieje inny sposób inicjowania tych obiektów.