Организация внешн.доступа к лок.комп. класса(Спецификатор 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!