Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Class task

Class list

Class dat

{

int day,month,year;

int month;

int year;

static dat *fst; // Указатель на первый элемент

dat *next; // Указатель на следующий элемент

public:

void show(); // Просмотр всех объектов

dat(); // Конструктор

~dat(); // Деструктор

};

dat *dat::fst = NULL; //Определение статического элемента

void dat::show()

{

dat *p;

for (p=fst; p!=NULL; p=p->next)

{ /* вывод информации об объекте */ }

};

//------ Конструктор - включение в начало списка ------- dat::dat()

{ /*... */ next = fst; fst = this; }

//------ Деструктор - поиск и исключение из списка ------dat::~dat()

{

dat *&p = fst; // Ссылка на указатель на

// текущий элемент списка

for (; p!=NULL; p = p->next)

if (p = this) // Найден - исключить и

{

p = p->next;

return; // и выйти

};

};

В данном примере используется ссылки на указатель текущего элемента списка (неявный указатель на указатель текущего элемента списка).

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

{

...

static void show(); // Стaтическая функция просмотра

} // списка объектов

static void list::show()

{

list *p;

for (p = fst; p!=NULL; p=p->next)

{...вывод информации об объекте... };

};

void main()

{

...

list::show(); // Вызов функции по полному имени

};

Например, для управления задачами в операционной системе или в ее модели часто бывает полезен список всех задач:

{

//...

task *next;

static task *task_chain;

void shedule(int);

void wait(event);

//...

};

Описание члена task_chain (цепочка задач) как static обеспечивает, что он будет всего лишь один, а не по одной копии на каждый объект task. Он все равно остается в области видимости класса task, и "извне" доступ к нему можно получить, только если он был описан как public. В этом случае его имя должно уточняться именем его класса:

task::task_chain;

В функции члене на него можно ссылаться просто task_chain. Использование статических членов класса может заметно снизить потребность в глобальных переменных.

Статическими могут быть объявлены также и функции - члены. Их "статичность" определяется тем, что вызов их не связан с конкретным объектом и может быть выполнен по полному имени. Соответственно в них не используются неявный указатель на текущий объект this. Они вводятся, для выполнения действий, относящихся ко всем объектам класса. Для предыдущего примера функция просмотра всех объектов класса может быть статической:

<== предыдущая лекция | следующая лекция ==>
Class X | Class C
Поделиться с друзьями:


Дата добавления: 2014-01-13; Просмотров: 269; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.