Пријатељске функције класа

Пријатељске функције неке класе које нису чланови те класе али имају право приступа до приватних чланова те класе. Пријатељске функције могу да буду обичне (глобалне) функције или да буду методе других класа.

Да би функција постала пријатељска функција неке класе потребно је у дефиницији те класе да се наведе њен прототип или дефиниција са модификатором friend на почетку:

friend тип функција (аргументи);
friend тип функција (аргументи) блок

Пријатељске функције се дефинишу као и било које друге функције. Не поседују показивач this за класу чије су пријатељске функције. Због тога могу да обрађују само конкретне објекте те класе. Ако је пријатељска функција метода неке друге класе, поседује показивач this за своју класу.

Пријатељска функција f за објекат x неке класе позива се са f(x)

Метода g за објекат x неке класе позива се са x.g()

Пријатељске функције за исту операцију имају један аргумент више него методе. То је објекат коме се приступа. Код метода објекат се подразумева приликом дефиниције, а појављује се приликом позивања методе као први операнд оператора . или ->

Пример:

// alfa.h
class Alfa
{
int x;
public:
void p(int n){x=n;} // smestanje vrednosti
int q(){return x;} // uzimanje vrednosti
friend void r(int n,Alfa &a){a.x=n;} // smestanje vrednosti
friend int s(Alfa s){return s.x;} // uzimanje vrednosti
};

#include<iostream>
#include"alfa.h"
using namespace std;
int main()
{
Alfa a;
a.p(55); //smestanje u objekat metodom
int i=a.q(); // uzimanje iz objekta metodom
r(55,a); // smestanje u objekat prijateljskom funkcijom
int j=s(a); // uzimanje iz objekta prijateljskom funkcijom
cout<<i<<' '<<j<<endl;
return 0;
}
Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s