русс | укр

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

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


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


Дружні класи


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


Методи можуть бути перетворені в дружні функції одночасно з перевизначенням всього класу як дружнього. Програма 13.13 показує, як це виглядає на практиці

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

/////////////

class alpha

{private:

int data1;

public:

alpha():data1(99)

{ }

friend class beta;

};

///////////////

class beta

{public:

void func1(alpha a) {cout<<”\ndata1=”<<a.data1;}

void func2(alpha a) {cout<<”\ndata1=”<<a.data1;}

};

//////////////

 

int main()

{clrscr();

alpha a;

beta b;

b.func1(a);

b.func2(a);

cout<<endl;

bioskey(0);

return 0;

}

Програма 13.13

 

Для класу alpha весь клас beta оголошений дружнім. Тепер всі методи класу beta мають доступ до прихованих даних класу alpha.

Ми оголосили клас дружнім, використовуючи вираз:

friend class beta;

Можна було вчинити інакше: спершу оголосити звичайний клас beta

class beta

а потім оголосити клас alpha, а всередині визначення alpha оголосити дружність класу beta

friend beta

 

Статичні функції

При вивченні теми «Об’єкти і класи» (лекції 11-13) ми ввели поняття статичних даних класу (програма 11.8). Нагадаємо, що статичні дані не дублюються для кожного об’єкту, швидше, один елемент даних використовується всіма об’єктами класу. В тій же програмі був показаний клас, який запам’ятовував, скільки в нього було об’єктів. Спробуємо розвинути цю ідею, показавши, що функції, як і дані, теж можуть бути статичними. Крім демонстрації статичних функцій, наша програма створить клас, який дозволить присвоювати унікальний ідентифікаційний номер (ID) кожному зі своїх об’єктів. Це дозволяє запитати в об’єкта, хто він такий, що буває корисним при відлагодженні програми. Ще одна задача цього прикладу полягає в тому, щоб пролити світло на деструктори і роботу з ними.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

/////////////////

class gamma

{private:

static int total;

int id;

public:

gamma()

{total++;

id=total;

}

~gamma()

{total--;

cout<<”Видалення ID”<<id<<endl;

}

Static void showtotal()

{cout<<”Всього:”<<total<<endl;

}

void showid()

{cout<<”ID:”<<id<<endl;

}

};

////////////////

int gamma::total=0;

//////////////////

 

int main()

{clrscr();

gamma g1;

gamma::showtotal();

gamma g2,g3;

gamma::showtotal();

g1.showid();

g2.showid();

g3.showid();

cout<<»------------endofprogram------\n»;

return 0;

}

Програма 13.14

 

 


<== попередня лекція | наступна лекція ==>
Дружність і функціональний запис | Доступ до статичних функцій


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