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.

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


 

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

40219. Показатели оценки качества основных средств и эффективности их использования 30 KB
  Показатели оценки качества основных средств и эффективности их использования Анализ эффективности использования основных средств Основные средства это один из видов производственных ресурсов. Под запасами ресурсов понимается наличный объем ресурсов на отчетную дату по балансу под затратами текущие расходы ресурсов в частности по основным средствам амортизация. Обобщающим показателем эффективности использования основных средств является фондоотдача. При расчете фондоотдачи в стоимости основных средств учитываются собственные и...
40220. Капитальные вложении как способ воспроизводства основных фондов. Источники финансирования капиталь-ного строительства, виды, капитальных вложений 34 KB
  В мировой практике различают следующие виды инвестиций:реальные прямые инвестиции это вложение капитала непосредственно в средства производства;финансовые инвестиции вложения в ценные бумаги а также помещение капитала в банки;интеллектуальные инвестиции покупка лицензий патентов ноухау подготовка и переподготовка кадров.Источниками финансирования капитальных вложений являются:собственные финансовые ресурсы и внутрихозяйственные резервы;заемные финансовые средства;привлеченные финансовые средства получаемые от продажи акций паевых...
40221. Доходы организации сущность, виды, факторы, влияющие на их величину 30 KB
  Доходы организации сущность виды факторы влияющие на их величину. Факторы влияющие на величину доходов На величину дохода предприятия влияют как внутренние так и внешние факторы. Перечисленные факторы являются внешними так как они не зависят от деятельности предприятия но могут влиять на объем полученного дохода. Внутренние факторы это те факторы которые непосредственно зависят от деятельности сотрудников предприятия.
40222. Подходы к планированию выручки 26.5 KB
  На начальном этапе эксперты специалисты коммерческого отдела получают для изучения результаты анализа рынка сбыта. К тому же экспертные оценки будущих продаж могут оказаться несостоятельными в случае существенной перегруппировки рынка появления принципиально новых видов продукции и т. Сильная сторона в том что экспертные оценки могут с успехом применяться в отсутствие статистических данных о состоянии и динамике рынка накопленной истории продаж. Применение метода от достигнутого актуально для компаний со стабильной конъюнктурой рынка...
40223. Расходы организации состав и классификация 24.5 KB
  Расходы также классифицируются на четыре группы: расходы по обычным видам деятельности: себестоимость произведенных товаров продукции работ услуг и произведенные расходы сопутствующие поступлению выручки; операционные расходы: расходы связанные с предоставлением за плату во временное пользование активов и прав организации; расходы связанные с продажей выбытием и прочим списанием основных средств и иных активов; расходы связанные с участием в уставных капиталах других организаций; проценты уплаченные за пользование денежными...
40224. Систематизация и управление издержками производства 22.5 KB
  Соотношение отдельных элементов затрат себестоимости составляет структуру себестоимости. Постоянное влияние на нее оказывают следующие факторы: состояние экономики инфляционный процесс налоги; увеличение затрат на рекламу; поведение покупателей; уровень конкуренции с учетом качества сервиса предлагаемого конкурентами; состояние кредитноденежной и платежной дисциплины; совершенствование структуры управления; внедрение квалифицированного менеджмента. Систематическое определение и анализ структуры затрат на предприятии...
40225. Планирование затрат 29.5 KB
  Планирование затрат. В сущности планирование затрат является одним из основных методов управления как непосредственно производством так и общеэкономической деятельностью предприятия. Вопросы планирования затрат на производство и реализацию продукции работ услуг являются непростыми задачами как стратегического так и оперативного экономического анализа. Необходимость предъявления повышенных требований к организации учета затрат на производство и реализацию продукции обусловлена тем что от правильности и своевременности определения...
40226. Прибыль как экономическая категория. Подходы к управлению прибылью 35.5 KB
  На уровне предприятия чистый доход принимает форму прибыли. Наличие прибыли на предприятии означает что его доходы превышают все расходы связанные с его деятельностью. Доля чистой прибыли оставшаяся в распоряжении предприятия после уплаты налогов и других обязательных платежей должна быть достаточной для финансирования расширения производственной деятельности научнотехнического и социального развития предприятия материального поощрения работников. Таким образом планирование прибыли является элементом системы управления прибыли которую...
40227. Управление прибылью на основе анализа безубыточности 36.5 KB
  Управление прибылью на основе анализа безубыточности. Этот метод представляет собой еще один затратный метод ценообразования при котором производится определение точки безубыточности brekeven и целевой прибыли. Анализ безубыточности осуществляется на основе исследования соотношения затраты объем прибыль которое отражает взаимосвязь затрат выручки объема производства и прибыли. По существу этот метод сводится к определению точки безубыточности производства критической точки такого объема продукции при реализации которого...