Методи можуть бути перетворені в дружні функції одночасно з перевизначенням всього класу як дружнього. Програма 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