русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Класи, об’єкти та пам’ять


Дата додавання: 2014-04-22; переглядів: 927.


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

 

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

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

Програма 9.8 ілюструє просте використання статичного поля класу:

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class foo

{private:

static int count; //Спільне поле

public:

foo()

{count++;} //Інкрементування при створенні

int getcount()

{return count;}

};

int foo:: count=0; //Визначення count

 

int main()

{clrscr();

foo f1,f2,f3;//Створення 3 обєктів

cout << "Число обєктів " <<f1.getcount()<<endl;

cout << " Число обєктів " <<f2.getcount()<<endl;

cout << " Число обєктів " <<f3.getcount()<<endl;

bioskey(0);

return 0;

}

Програма 9.8

В цьому прикладі клас foo містить єдине поле count, що має тип static int. Конструктор класу інкрементує значення поля count. В функції main() ми визначаємо 3 об’єкти класу foo. Оскільки конструктор в цьому випадку викликається тричі, інкрементування поля count теж відбувається тричі. Метод getcount() повертає значення count. Ми викликаємо цей метод для кожного з об’єктів і в кожному випадку одержуємо ту саму величину.

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

 


<== попередня лекція | наступна лекція ==>
Об’єкти, що повертаються функцією | Роздільне оголошення і визначення полів класу


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн