Организация внешн.доступа к лок.комп. класса(Спецификатор friend)



Если некоторая функция определена как friend функция для некоторого класса, то она:

– не является компонентой-функцией этого класса;

– имеет доступ ко всем компонентам этого класса– friend-функции не имеют указателя this;

– friend-функции не наследуются в производных классах;

class kls { int i,j; public: kls(int i,int J): i(I),j(J) {}

int max() {return i>j? i: j;} friend double fun(int, kls&); };

double fun(int i, kls &x)

{ return (double)i/x.i; }

main() { kls obj(2,3); cout << obj.max() << endl;

cout << fun(3,obj) << endl; return 1;}

 


Proxi-классы

Реализация скрытия данных и интерфейса некоторого класса может быть выполнена посредством использования proxi-класса. Proxi-класс позволяет клиентам исходного класса использовать этот класс не имея доступа к деталям его реализации. Реализация proxi-класса предполагает следующую общую структуру:- реализация исходного класса, компоненты которого требуется скрыть;

- реализация proxi-класса для доступа к компонентам исходного класса;- функция, в которой вызываются компоненты proxi-класса

class cls{ int val;

public: cls(int); set(int); int get() const;};

cls:: cls(int v) {val=v;}

cls:: set(int v){val=v;}

int cls:: get() const {return val;}

class cls;

class prox{ cls *pr; public: prox(int); set(int);

int get() const; ~prox();};

prox:: prox(int vv) {pr=new cls(vv);}

prox:: set(int vv){pr->set(vv);}

int prox:: get() const {return pr->get();}

prox:: ~prox(){delete pr;}

void main(){ prox obj(1); cout<<”val=”<<obj.get()<<endl;

obj.set(2);

cout<<”Значение val класса cls = ”<<obj.get()<<endl;}

 


Дата добавления: 2015-12-21; просмотров: 64; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!