726_____________________________________________Глава 12

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

Если такая константа объявлена как статическая (см. раздел 12.13.2), то в ее
объявление в классе можно непосредственно включить инициализацию:

static const int МахА = 10;

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

const int МахА;

const int MinA;

вводящие две константы — максимальное и минимальное значения переменной А,
то реализацию конструктора такого класса с описанным ранее прототипом

MyClass(int = 0);

надо дополнить инициализатором элементов:

MyClass::MyClass(int a) : MaxA(lO), MinA(l) {SetA(a);};

В данном случае инициализатор задает константе МахА начальное значение
10, а константе MinA — значение 1.

Можно предоставить пользователю возможность изменять значения констант
в момент создания объекта. В этом случае в конструкторе с умолчанием надо пре-
дусмотреть для констант соответствующие значения по умолчанию:

MyClass(int А = 0, int МахА = 10, int MinA = 1);

или

MyClass(int = 0, int = 10, int = 1);

(второй вариант менее удобен, так как не позволяет по прототипу функции понять,
в какой последовательности должны задаваться параметры).
Тогда реализацию конструктора можно оформить так:

MyClass::MyClass(int a, int i, int j) : MaxA(i), MinA(j)
{ SetA(a); )

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

MyClass МС;          // умолчание: А = 0, МахА = 10, MinA = 1
MyClass MC(20);      // задано     А = 20, МахА = 10, MinA = 1
MyClass MC(20,15);   // задано     А = 20, МахА = 15, MinA = 1
MyClass MC(20,15,2); // задано     А = 20, МахА = 15, MinA = 2

Теперь остановимся на деструкторах. Это специальные функции — элементы,
срабатывающие при уничтожении динамически размещенного объекта класса и
освобождающие занимаемую им память. Имя деструктора совпадает с именем
класса, но перед ним записывается символ тильда (-). Как и для конструктора,
деструкторе не указывается возвращаемый тип. Например:

class MyClass
{
public:

-MyClass(); // деструктор класса

);