Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_17.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
208 Кб
Скачать
☆

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

Обычно, когда вы создаете объекты определенного класса, каждый объект получает свой собственный набор элементов данных. Однако возможны такие ситуации, при которых объектам одного и того же класса необходимо совместно использовать один или несколько элементов данных (статические э лементы данных). В таких случаях объявляйте элементы данных как общие ил и частные, а затем предваряйте тип ключевым словом 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. Далее объявите этот элемент вне класса как глобальную переменную. Любые изменения, которые ваша программа делает с этим элементом, будут немедленно отражены в объектах данного класса.

Использование элементов с атрибутами public static, еслиобъекты не существуют

Как вы только что узнали, при объявлении элемента класса как static этот элемент совместно используется всеми объектами данного класса. Однако возможны ситуации, когда программа еще не создала объект, но ей необходимо использовать элемент. Для использования элемента ваша программа должна объявить его как public и static. Например, следующая программа USЕ_MBR.CPP использует элемент page_count из классаbook_series, даже если объекты этого класса не существуют:

#include <iostream.h>

#include <string.h>

class book_series

{  public:     static int page_count;  private:     char title [64];     char author[64];     float price;  };

int book_series::page_count;

void main(void)  {     book_series::page_count = 256;     cout << "Текущее значение page_count равно " << book_series::page_count << endl;  }

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