Лекция: Переменные и операции класса

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

Переменная класса в С++ описывается с ключевым словом static, она создается один раз как часть класса, а не для каждого конкретного экземпляра данного класса. Функция, которой требуется доступ к переменным класса, но не требуется, чтобы она вызывалась для конкретного экземпляра класса, также описывается как статическая (static).

Пример. Опишем класс для работы с датами.

 

class Date{

int day;// день

int month;// месяц

int year;// год

public:

Date (int, int, int); // день, месяц, год

Date (int, int); // день, месяц, текущий год – по умолчанию

Date (int); // день, текущие месяц и год – по умолчанию

Date ( ); // дата по умолчанию – сегодня

.. .

};

 

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

Рассмотрим альтернативное решение. Опишем конструктор с аргументами по умолчанию.

 

class Date{

int day, month, year;

static Date default_date;

public:

Date (int d=0, int m=0, int y=0);

.. .

static void set_default(int, int, int);

};

 

Если значение аргумента является нулевым, следует воспользоваться соответствующим элементом даты, задаваемой по умолчанию – default_date. Поскольку значение default_date должно быть одинаковым для всех объектов класса, данная переменная является статическим членом. Для ее инициализации описана также статическая функция-член set_default. Статические члены – и функции, и данные – должны быть где-то определены. Например,

 

Date Date :: default_date (1, 1, 2000);

void set_default (int d, int m, int y)

{

Date :: default_date= Date (d, m, y);

}

 

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

 

еще рефераты
Еще работы по информатике