R.12.1 Конструкторы

We use cookies. Read the Privacy and Cookie Policy

R.12.1 Конструкторы

Конструктором называется функция-член, имя которой совпадает с именем класса, он используется для построения значений, имеющих тип данного класса. Если в классе есть конструктор, то каждый объект этого класса перед произвольным использованием будет инициализироваться, см. §R.12.6.

Конструктор может вызываться для объекта со спецификацией const или volatile. Сам конструктор нельзя описывать со спецификацией const или volatile (§R.9.3.1). Конструктор также не может иметь спецификацию virtual или static.

Конструкторы не наследуются, однако, стандартные конструкторы и конструкторы копирования при необходимости создаются транслятором (§R.12.8). Такие конструкторы являются общими.

Стандартным конструктором для класса X является такой конструктор класса X, который можно вызывать без параметров. Стандартный конструктор для класса X будет создан только тогда, когда для класса X не описано ни одного конструктора.

Конструктором копирования для класса X называется конструктор, который вызывается для копирования объекта класса X, т.е. вызывается с одним параметром типа X. Например, X::X(const X&) и X::X(X&, int=0) являются конструкторами копирования. Конструктор копирования создается только тогда, когда не описано ни одного конструктора копирования.

Конструктор копирования для класса X не должен иметь в качестве параметра объект типа X, например X::X(X) незаконное обращение.

Конструктор для массива элементов вызывается в порядке возрастания адресов элементов (§R.8.2.4).

Если у класса есть базовые классы с конструктором или члены, являющиеся объектами с конструктором, их конструкторы вызываются прежде, чем конструктор производного класса. В §R.12.6.2 объясняется как задаются параметры для таких конструкторов и как определяется порядок их вызова.

Объект класса с конструктором не может быть членом объединения.

Для конструктора не нужно указывать никакого типа возвращаемого значения, даже void. В операторе return в теле конструктора нельзя указывать возвращаемое значение. Не допустима операция взятия адреса конструктора.

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

имя-класса ( список-выражений opt )

Приведем пример:

complex zz = complex(1,2.3);

print(complex(7.8,1.2));

Объект, созданный таким образом является безымянным (если только конструктор не использовался для инициализации поименованной переменной как zz выше), а время его жизни ограничено выражением, в котором он был создан, см. §R.12.2.

В конструкторе можно вызывать функцию-член, см. §R.12.7.