Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программ на С++.doc
Скачиваний:
15
Добавлен:
29.09.2019
Размер:
1.59 Mб
Скачать

Урок 25. Статические функции и элементы данных

До настоящего момента каждый создаваемый вами объект имел свой собственный набор элементов данных. В зависимости от назначения вашего приложения могут быть ситуации, когда объекты одного и того же класса должны совместно использовать один или несколько элементов данных. Например, предположим, что вы пишете программу платежей, которая отслеживает рабочее время для 1000 служащих. Для определения налоговой ставки программа должна знать условия, в которых работает каждый служащий. Пусть для этого используется переменная классаstate_of_work. Однако, если все служащие работают в одинаковых условиях, ваша программа могла бы совместно использовать этот элемент данных для всех объектов типа employee. Таким образом, ваша программа уменьшает необходимое количество памяти, выбрасывая 999 копий одинаковой информации. Для совместного использования элемента класса вы должны объявить этот элемент как static (статический). Этот урок рассматривает шаги, которые вы должны выполнить для совместного использования элемента класса несколькими объектами. К концу этого урока вы освоите следующие основные концепции:

  • C++ позволяет иметь объекты одного и того же типа, которые совместно используют один или несколько элементов класса.

  • Если ваша программа присваивает значение совместно используемому элементу, то все объекты этого класса сразу же получают доступ к этому новому значению.

  • Для создания совместно используемого элемента данных класса вы должны предварять имя элемента класса ключевым словом static.

  • После того как программа объявила элемент класса как static, она должна объявить глобальную переменную (вне определения класса), которая соответствует этому совместно используемому элементу класса.

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

Совместное использование элемента данных

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

private:  static int shared_value;

После объявления класса вы должны объявить элемент как глобальную переменную вне класса, как показано ниже:

int class_name::shared_value;

Следующая программа SHARE_IT.CPP определяет класс book_series,совместно использующий элемент page_count, который является одинаковым для всех объектов (книг) класса (серии). Если программа изменяет значение этого элемента, изменение сразу же проявляется во всех объектах класса:

#include <iostream.h>

#include <string.h>

class book_series

{  public:     book_series(char *, char *, float);     void show_book(void);     void set_pages(int) ;  private:     static int page_count;     char title[64];     char author[ 64 ];     float price;  };

int book_series::page__count;

void book_series::set_pages(int pages)

{     page_count = pages;  }

book_series::book_series(char *title, char *author, float price)

{     strcpy(book_series::title, title);     strcpy(book_series::author, author);     book_series::price = price;  }

void book_series:: show_book (void)

{     cout << "Заголовок: " << title << endl;     cout << "Автор: " << author << endl;     cout << "Цена: " << price << endl;     cout << "Страницы: " << page_count << endl;  }

void main(void)

{     book_series programming( "Учимся программировать на C++", "Jamsa", 22.95);     book_series word( "Учимся работать с Word для Windows", "Wyatt", 19.95);     word.set_pages(256);     programming.show_book ();     word.show_book() ;     cout << endl << "Изменение page_count " << endl;     programming.set_pages(512);     programming.show_book();     word.show_book();  }

Как видите, класс объявляет page_count как static int. Сразу же за определением класса программа объявляет элемент page_count как глобальную переменную. Когда программа изменяет элемент page_count,изменение сразу же проявляется во всех объектах класса book_series.

Совместное использование элементов класса

В зависимости от вашей программы возможны ситуации, когда вам потребуется совместно использовать определенные данные несколькими экземплярами объекта. Для этого объявите такой элемент как static. Далее объявите этот элемент вне класса как глобальную переменную. Любые изменения, которые ваша программа делает с этим элементом, будут немедленно отражены в объектах данного класса.