68943

Статичні члени класу

Лекция

Информатика, кибернетика и программирование

Якщо перед оголошенням змінної-члена поставити ключове слово static, компілятор створить тільки один екземпляр цієї змінної, який використовуватиметься всіма об’єктами даного класу. На відміну від звичайних змінних-членів, статичні змінні-члени не копіюються для кожного об’єкту окремо.

Украинкский

2014-09-27

43.5 KB

2 чел.

Лекція № 5

Тема: Статичні члени класу

Члени класу (як функції, так і змінні) можуть бути статичними.

Якщо перед оголошенням змінної-члена поставити ключове слово static, компілятор створить тільки один екземпляр цієї змінної, який використовуватиметься всіма об'єктами даного класу. На відміну від звичайних змінних-членів, статичні змінні-члени не копіюються для кожного об'єкту окремо. Незалежно від кількості об'єктів класу, статична змінна завжди існує в одному екземплярі. Таким чином, всі об'єкти даного класу використовують одну і ту ж змінну. Всі статичні змінні ініціалізувалися нулем ще до створення першого об'єкту класу.

Оголошення статичної змінної-члена в класі не означає її визначення (інакше кажучи, пам'ять для неї не виділяється). Щоб розмістити статичну змінну в пам'яті, слід визначити її поза класом, тобто глобально. Для цього в повторному оголошенні статичній змінній перед її ім'ям указується ім'я класу, якому вона належить, і оператор дозволу області видимості. (Нагадаємо, що оголошення класу є всього лише логічною схемою, а не фізичною суттю.)

Щоб розібратися в механізмі використання статичних змінних-членів, розглянемо наступну програму.

#include <iostream>

using namespace std;

class shared {

static int а;

int b;

public:

void set(int i, int j) {a=i; b=j;}

void show();

} ;

int shared::a; // Визначуваний змінну а.

void shared::show() {

cout << "Це статична змінна а: " << а;

cout << "Чпето звичайна змінна b: " « b;

cout « "\n";

}

int main() {

shared x, у;

x.set(l, 1); // Привласнюваний змінною а значення 1 x.show();

у.set(2, 2); // Привласнюваний змінною b значення 2 у.show();

x.show();

/* Тут одночасно змінюються значення змінних-членів об'єктів х і у, оскільки змінна а використовується обома об'єктами. */

return 0;

}

Результат роботи цієї програми такий.

Це статична змінна а: 1

Це звичайна змінна b: 1

Це статична змінна а: 2

Це звичайна змінна b: 2

Це статична змінна а: 1

Це звичайна змінна а: 1

Зверніть увагу на те, що цілочисельна змінна а оголошена як усередині класу shared, так і поза ним. Ми вже указували, що це необхідно, оскільки оголошення змінній а усередині класу shared не супроводжується виділенням пам'яті.

Статична змінна-член виникає до створення першого об'єкту класу. Наприклад, в наступній короткій програмі змінна а одночасно є і відкритою, і статичною. Отже, функція main() має до неї прямий доступ. Оскільки змінна а виникає раніше об'єктів класу share, їй можна привласнити значення на самому початку програми. Як показано в програмі, при створенні об'єкту х значення змінної а не змінюється. З цієї причини обидва оператори висновку відображають на екрані одне і те ж значення — 99.

#include <iostream>

using namespace std;

class shared {

public:

static int а;

} ;

int shared::a; // Визначення змінної а.

int main() {

// Ініціалізація перед створенням об'єкту.

shared::а = 99;

cout << "Початкове значення змінної а: " << shared::а; cout « "\n";

shared х;

cout << "Значення змінної х.а: " << х.а;

return 0;

}

Зверніть увагу на те, що при зверненні до змінної а необхідно указувати ім'я класу, якому вона належить, і застосовувати оператора дозволу області видимості. Як правило, щоб звернутися до статичної змінної-члена незалежно від об'єкту, необхідно завжди указувати ім'я класу, в якому вона оголошена.

Статичні змінні-члени дозволяють управляти доступом до ресурсів, які спільно використовуються всіма об'єктами класу. Наприклад, можна створити декілька об'єктів, що записують дані на жорсткий диск. Проте очевидно, що в кожен конкретний момент часу запис може проводити лише один об'єкт. У таких ситуаціях слід оголосити статичну змінну, службовку індикатором. По значенню цієї змінної можна визначити, вільний файл або зайнятий. Кожний з об'єктів повинен аналізувати це значення перед початком запису. Розглянемо приклад, що ілюструє цю ситуацію.

#include <iostream>

using namespace std;

class cl   {

static  int resource; public:

int get_resource();

void free_resource() {resource = 0;}

};

int cl::resource; // Визначуваний ресурс.

int cl::get_resource() {

if(resource) return 0; // Ресурс зайнятий,

else {

resource = 1;

return 1;  // Ресурс наданий об'єкту.

}

}

int main() {

cl obi, ob2;

if(obi.get_resource()) cout << "Об'єкт obi володіє ресурсом\n";

if(!ob2.get_resource()) cout « "Об'єкту оЬ2 доступ запрещен\n";

obi.free_resource();  // Звільняємо ресурс.

if(ob2.get_resource())

cout << "Об'єкт оЬ2 може використовувати ресурс\n";

return 0;

}

За допомогою статичної змінної можна також визначити кількість існуючих об'єктів конкретного класу. Розглянемо приклад.

#include <iostream>

using namespace std;

class Counter {

public:

static int count;

Counter() { count++; }

~Counter() { count--; }

};

int Counter::count;

void Ј () ;

int main(void){

Counter ol;

cout << "Існуючі об'єкти: ";

cout « Counter::count << "\n";

Counter o2;

cout << "Існуючі об'єкти: ";

cout << Counter:-.count << "\n";

f();

cout « "Існуючі об'єкти: ";

cout << Counter::count « "\n";

return 0;

}

void f() {

Counter  temp;

cout  «   "Існуючі  об'єкти:   ",-

cout  «  Counter::count  «   "\n";

//  Після  повернення з функції  f()   змінна  temp знищується

}

Ця програма виводить на екран наступні рядки.

Існуючі об'єкти: 1

Існуючі об'єкти: 2

Існуючі об'єкти: 3

Існуючі об'єкти: 2

Як видимий, статична змінна-член count збільшується при кожному створенні об'єкту і зменшується при кожному знищенні. Отже, з її допомогою можна відстежити кількість існуючих об'єктів класу Counter.

Статичні змінні-члени не замінюють собою глобальні. Проте глобальні змінні не відповідають духу об'єктно-орієнтованого програмування, оскільки вони порушують принципи інкапсуляції.


 

А также другие работы, которые могут Вас заинтересовать

81911. Контроль как функция менеджмента 41.93 KB
  Существует три аспекта управленческого контроля: установление стандартов точное определение целей которые должны быть достигнуты в определенный отрезок времени. Необходимость контроля обусловлена следующими обстоятельствами: потребностью организации процесса производства в соответствии с имеющимися резервами и ресурсами; требованиями потребителей к качеству стандарту и сертификации выпускаемой продукции; изменяющимися внутренними и внешними условиями производства необходимостью выявления тенденций меняющегося спроса и предложения...
81913. Этапы контроля в менеджменте 39.29 KB
  Независимо от типов и количества контрольных систем необходимых организации существует четыре основных этапа любого процесса контроля. Первый этап в контрольном процессе установление стандартов. Второй этап в процессе контроля измерение фактических результатов деятельности контролируемого объекта. На этом этапе необходимо определить качественные и количественные методы измерения.
81914. Новейшие тенденции в менеджменте в области контроля 37.86 KB
  Современные тенденции развития контроля. Контрольные функции традиционно осуществляемые централизованно в коммерческой фирме ее руководством а в государстве центральными органами постепенно перераспределяются между: верхними звеньями управления; сторонними организациями специализирующимися на функциях контроля; потребителями продукции; низовыми звеньями управления Часть контрольных функций передается внешним организациям. Изменение содержания контроля и новые методы его осуществления.
81915. Информация как основа коммуникаций и ее значение в менеджменте 38.97 KB
  Процесс управления рассматривается как процесс восприятия преобразования и передачи информации. Основой управления является принятие решений которые основаны на использовании информации. Степень обоснованности решений зависит от полноты достоверности и своевременности информации. происходит передача информации для принятия и реализации решения.
81916. Сущность и виды коммуникаций 40.32 KB
  Установить взаимосвязь между людьми в организации. Сформулировать общие взгляды на внутреннюю среду организации. Организовать совместную работу коллективов с целью выполнения задач организации. Виды коммуникаций: Вертикальная ϶ᴛᴏ обмен информацией между руководителем и подчиненными; Горизонтальная представляет собой процесс передачи информации между сотрудниками одного уровня; Вербальная процесс общения с целью передачи информации при помощи слов; Невербальная общение с помощью мимики жестов взглядов; Формальная Неформальная...
81917. Коммуникативный процесс в менеджменте 55.81 KB
  Декодирование это перевод символов отправителя в уме получателя. Если символы избранные отправителем имеют точно такое же значение для получателя последний будет знать что именно имел в виду отправитель когда формулировалась его идея. Получатель становится отправителем и проходит через все этапы процесса обмена информацией для передачи своего отзыва начальному отправителю который теперь играет роль получателя. Эффект коммуникационного процесса ϶ᴛᴏ изменение в поведении получателя кᴏᴛᴏᴩые происходят в результате принятия сообщения.
81918. Коммуникативные барьеры и способы их преодоления в менеджменте 41.28 KB
  Содержательные барьеры проблемы в понимании смысла и значения отправленного или полученного сообщения Они делятся в свою очередь на: фонетические использование элементов из других языков и диалектов дефекты речи и дикции невнятность речи нарушения темпа речи наличие значительного количества звуков и словпаразитов; семантические вложение различного содержания использования жаргонов и слешей; стилистические несовпадение стиля речи коммуникатора отправителя с содержанием сообщения; логические различные логические системы...
81919. Стили управления в организации 38.89 KB
  Авторитарный стиль сосредоточение на работе и полное пренебрежение людьми. Авторитарный жесткий стиль может быть оправдан в группе с неразвитыми материальными и высшими потребностями а также в экстремальных ситуациях. Либеральный стиль сосредоточение на человеке стиль невмешательства в дела подчиненных безынициативность ожидание указаний сверху руководитель непоследователен в своих действиях легко поддается мнению других влиянию некомпетентен в решении вопросов его характеризует боязнь принятия решений перекладывание дел...