![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 20. Статические члены 211
Применение статических данных-членов Существует бесчисленное множество областей применения статических дан- но здесь мы остановимся лишь на нескольких из них. Во-первых, можно использовать статические члены для хранения количества объектов, задей- ствованных в программе. Например, в классе такой счетчик можно нулем, а затем увеличивать его на единицу внутри конструкто- ра и уменьшать внутри деструктора. Тогда в любой момент этот статический член будет содержать количество существующих в данный момент объектов класса Student . Однако следует помнить, что этот счетчик будет содержать количество объектов, существующих момент (включая временные объекты), а не количество студентов17. Еще один способ использования статических членов заключается в индицировании выполнения определенного действия. Например, классу Radio может понадобиться инициализировать некие аппаратные средства при первом выполнении команды tune, но не перед последующими вызовами. С помощью статического члена можно указать, что первый вызов tune уже выполнил инициализацию. Кроме всего прочего, статический член может служить указателем безошибочности инициализации аппа- ратных средств. И наконец, в статических членах можно хранить указатель на первый элемент свя- занного списка. Таким образом, статические члены могут содержать любую информа- цию "общего использования", которая будет доступна для всех объектов и во всех функциях (не стоит забывать, однако, что чрезмерное использование статических пе- ременных усложняет поиск ошибок в программе).
Функции-члены также могут быть объявлены статическими. Подобно статическим данным-членам, они связаны с классом, а не с каким-либо отдельным объектом клас- са. Это означает, что обращение к статическим как и к статиче- ским данным-членам, не требует наличия объекта. Если объект и присутствует, то ис- пользуется только его тип. Таким образом, оба вызова статической функции-члена number О в приведенном ниже примере легальны.
Вообще говоря, это зависит от используемого Так, GNU C++ не бу- дет вызывать функцию, в то время как Borland C++ или C++ сделает это. — Прим. ред. 17 Еще одно замечание: в этом случае вы должны позаботиться о том, чтобы счетчик увеличивался во всех включая конструктор копирования. — Прим. ред. 212 Часть III. "Классическое" программирование
{
static int f return
//. то же, что и
int
}; int = int argcs, char* { Student s; cou- << << "\n"; << << "\n"; return 0; } Обратите внимание на то, как статическая функция-член обращается к статиче- ским данным-членам. Поскольку статическая функция-член не связана с каким-либо объектом, она не может неявно обращаться к нестатическому члену. Таким образом, приведенный ниже пример неправилен. class Student {
//приведенный ниже код static char { return name; //Какое именно имя?
остальное то же, что и ранее... protected: char static int }; Это не означает, что статические функции-члены не имеют доступа к нестатиче- ским данным-членам. Рассмотрим следующий пример: <iostream.h>
class Student (
же конструктор и деструктор, что и ранее, конструктор обеспечивает вставку объекта связанный список (как это делается, сейчас //для нас неважно... Student (char () ; возвращает студента с указанным именем static Student* *pName);
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 228; Нарушение авторского права страницы