Читайте также:
|
|
Если нам нужно работать с объектами двух разных классов, то нужно использовать дружественные ф-ии.
class beta; //нужно для объявления frifunc
class alpha
{
private:
int data;
public:
alpha(): data(3) { } //конструктор без
//аргументов
friend int frifunc(alpha, beta); //дружественная функция
};
///////////////////////////////////////////////////////////
class beta
{
private:
int data;
public:
beta(): data(7) { } //конструктор без
//аргументов
friend int frifunc(alpha, beta); //дружественная функция
};
//--------------------------------------------------------
int frifunc(alpha a, beta b) //определение функции
{
return(a.data + b.data);
}
///////////////////////////////////////////////////////////
int main()
{
alpha aa;
beta bb;
cout << frifunc(aa, bb) << endl; //вызов функции
return 0;
}
Ключевое слово: friend
Это объявление может быть присвоено где угодно внутри класса. Нет никакой разницы, запишем мы его в public- или private-секцию. Объект каждого класса передается как параметр ф-ии, и ф-ия имеет доступ к скрытым данным обоих классов.
Дружественные классы.
class alpha
{
private:
int data1;
public:
alpha(): data1(99) { } //конструктор
friend class beta; //beta – дружественный класс
};
///////////////////////////////////////////////////////////
class beta
{ //все методы имеют доступ
public: //к скрытым данным alpha
void func1(alpha a) { cout << "\ndata1=" << a.data1;}
void func2(alpha a) { cout << "\ndata1=" << a.data1;}
};
///////////////////////////////////////////////////////////
int main()
{
alpha a;
beta b;
b.func1(a);
b.func2(a);
cout << endl;
return 0;
}
Для класса alpha весь класс beta провозглашен дружественным. Теперь все методы beta имеют доступ к скрытым данным alpha.
Дата добавления: 2015-08-17; просмотров: 48 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Виртуальные функции. | | | Статические функции |