Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 20. Статические члены 211




Функция-член                            (> в этом примере не вызывается. Все, что нужно знать C++ для обращения к                — это тип возвращаемого значения, а он может это выяснить и не выполняя эту функцию. Хотя этот пример и маловразумите" лен, но так оно и

Применение статических данных-членов

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

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

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

Еще один способ использования статических членов заключается в индицировании выполнения определенного действия. Например, классу Radio может понадобиться инициализировать некие аппаратные средства при первом выполнении команды tune, но не перед последующими вызовами. С помощью статического члена можно указать, что первый вызов tune уже выполнил инициализацию. Кроме всего прочего, статический член может служить указателем безошибочности инициализации аппа- ратных средств.

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

 

 

Функции-члены также могут быть объявлены статическими. Подобно статическим данным-членам, они связаны с классом, а не с каким-либо отдельным объектом клас- са. Это означает, что обращение к статическим как и к статиче- ским данным-членам, не требует наличия объекта. Если объект и присутствует, то ис- пользуется только его тип.

Таким образом, оба вызова статической функции-члена number О в приведенном ниже примере легальны.

 

 

Вообще говоря, это зависит от используемого                                  Так, GNU C++ не бу- дет вызывать функцию, в то время как Borland  C++ или                                                                                       C++ сделает это. — Прим. ред.

17

Еще одно замечание: в этом случае вы должны позаботиться о том, чтобы счетчик увеличивался во всех    включая конструктор копирования. — Прим. ред.

212                        Часть III. "Классическое" программирование


class Student

{

 

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; Просмотров: 208; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.01 с.)
Главная | Случайная страница | Обратная связь