Типы данных в языке C++__________________________________725

Простое задание в конструкторе значений данных в общем случае не гаранти-
рует их целостность. Обычно нужна еще проверка допустимости данных. Напри-
мер, если в классе есть функция записи SetA, осуществляющая такие проверки,
то лучше обратиться к ней и при задании начального значения. В этом случае реа-
лизация конструктора может иметь вид:

MyClass::MyClass(void) { SetA(O); }

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

MyClass МС;

или динамическим размещением переменной в памяти:

MyClass *РМС = new MyClass;

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

Недостатком конструкторов показанного типа является то, что все начальные
значения данных задаются в них конструктором. Вызывающая функция никак не
может вмешаться в этот процесс и задать какое-то другое значение.

Другой крайностью являются конструкторы, в которых все начальные значе-
ния задаются как параметры. Например, прототип конструктора может иметь вид

MyClass(int) ;

а его реализация:

MyClass::MyClass(int a) ( SetA(a); }

В этом случае поле FA инициализируется параметром, передаваемым в конст-
руктор. Создание объекта подобного класса должно выполняться операторами

MyClass МС(1);

ИЛИ

MyClass *РМС = new MyClass (1);

в которых подразумевается, что начальное значение поля FA должно быть равно 1.

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

Чаще всего используются конструкторы с параметрами по умолчанию (см.
главу 11 раздел 11.5.4). В этом случае объявление конструктора может иметь вид:

MyClass(int = 0);

а его реализация:

MyClass::MyClass(int a) ( SetA(a); )

Объект такого класса можно создавать любым из приведенных ранее опера-
тора создания объекта. Если при создании указывается аргумент, то его значение
присваивается полю. Если аргумент не указывается, то присваивается значение по
умолчанию (в нашем примере 0). Этот вариант конструктора наиболее гибкий. По-
этому он чаще всего используется при построении классов.

Хороший стиль программирования

Как правило, в классе надо предусматривать конструктор с параметрами по умолчанию.

В объявлении класса могут быть определены не только поля переменных, но и
некоторые именованные константы. Например:

const int МахА;