724_____________________________________________Глава 12

В этом примере имеются два статических элемента данных: открытый D и за-
крытый D1. Если пользователь должен иметь возможность получать значение за-
крытой статической переменной D1, то должна быть предусмотрена функция ее
чтения, названная в примере GetDl. Она должна быть объявлена открытой (pub-
lic) и статической (со спецификатором static). Статической может быть объявлена
любая функция, работающая только со статическими данными.

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

i = MyClass::D;

j = MyClass::GetDl() ;

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

static const int MaxA = 10;

const int MinA;

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

12.13.4 Конструкторы и деструкторы

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

Конструктором класса называется открытая функция — элемент, которая вы
зывается в момент создания объекта класса и должна инициализировать данны'
указанными в вызове значениями или значениями по умолчанию. Конструктор
имеет то же имя, что и сам класс.

Пример объявления и реализации конструктора:

class MyClass

{

public:

MyClass(void); // конструктор класса

private:

int A;

};

MyClass::MyClass(void) (A = 0;)

В этом примере объявлен конструктор MyClass без параметров, который прг
создании объекта задает начальное значение поля А равным 0. Обратите внимание
на то, что в отличие от других функций в объявлении конструктора не указывает
ся тип возвращаемого значения.