Static void drawAll()

{point*p=first;

if(p==NULL)return;

do p->draw()while(p=p->next!=NULL);}};

У прикладі всі екземпляри класу, що породжуються, зберігаються в списку, який потім використовується для зображення всіх створених на даний момент фігур:

if (point::first!=NULL)

Point::drawAll()

Існують чіткі правила iнiцiалiзацiї полів усередині опису класу. Звичайне поле не може бути iнiцiалiзоване при описі класу. Iніціалізація статичних полів допускається. Статичні змiнні можуть бути ініціалізовані за межами класу.

Якщо екземпляр класу оголошений як статичний, то цей клас не може мати конструкторів i, відповідно, жодне з його полів не може містити тип іншого класу, що має конструктор. Наприклад:

Class A

{private:

int large;

static int small;};

Class B

{private:

int bigwant;

static int count;

public:

B(void)

{bigwant=25;}};

Class C

{private:

B b;}

Class D

{private:

static int size;

static A an A;

static B a B;

Static C a C;//помилка

public:

D(void){ }};

У випадку, коли оголошені статичний елемент або статичне поле в розділі public, доступ можливий i через ".".

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

Tanyclass::staticfunction();

Статична функція-член виконує дії, що стосуються всіх об’єктів даного класу.

Цікаві ситуації виникають, якщо розглядати локальнi та глобальнi об'єкти. Розглянемо такий приклад:

Timer t1(5);

void f() {

static Timer t2(200);}

Main()

{f();}

У прикладі конструктор викличеться двічі: спочатку для глобального об'єкта, а потім при виклику функції f(). А якщо у функції main() не викликається функція f()? Чи викликається конструктор для локального статичного об'єкта, якщо функція, де він описаний, не викликається? Відповідь на ці запитання залежить від версії компілятора (напр., для Visual С++ 6.0 конструктор не викликається).

Для глобальних статичних об'єктів конструктори викликаються в тому порядку, у якому вони описані в програмі, деструктори – у зворотному. Причому параметри конструкторів для статичних об'єктів мають бути константними виразами. В останніх версіях компіляторів С++ фірми Microsoft допускається використання не константних виразів, а параметрів:

Void g(int a)

{static Timer t(a);}

Успадкування

Успадкування є потужним апаратом ООП. Пригадаємо, що успадкування полягає у здатності похідного класу успадковувати властивості базового, набуваючи при цьому своїх специфічних властивостей. За допомогою успадкування можна утворювати нові класи, використовуючи вже існуючі. Замість того, щоб писати код "із чистої сторінки" на базі існуючої ієрархії класів, можна побудувати нові класи, що змінюють властивості існуючих. Це дає величезну перевагу у часі, робить надзвичайно гнучким програмне забезпечення.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: