Поделиться через


Инициализация объектов членов

Классы могут содержать объекты-члены типа класса, но для обеспечения удовлетворения требований к объектам-членам должно выполняться одно из следующих условий:

  • Для класса содержащегося объекта не требуется конструктор.

  • Класс содержащегося объекта имеет доступный конструктор по умолчанию.

  • Все конструкторы содержащего класса явно инициализируют содержащийся объект.

Выполнение такой инициализации показано в следующем примере.

// 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()
{
}

Класс Rect, показанный в приведенном выше примере, содержит 2 объекта-члена класса Point. Его конструктор явным образом инициализирует объекты _topleft и _bottomright. Обратите внимание, что двоеточие стоит после закрывающей скобки конструктора (в определении). За двоеточием следуют имена и аргументы членов, используемые для инициализации объектов типа Point.

Примечание

Порядок, в котором указаны инициализаторы членов в конструкторе, не влияет на порядок создания членов; члены создаются в том порядке, в котором они объявлены в классе.

Объекты-члены в виде ссылок и const должны инициализироваться с использованием синтаксиса инициализации членов, приведенного в подразделе грамматики раздела Инициализация базовых классов и членов. Других способов инициализации таких объектов не существует.

См. также

Ссылки

Инициализация баз и членов