Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 37 стр.

UptoLike

Составители: 

37
Таким образом, благодаря преобразованиям транслятора, любая нестати-
ческая компонентная функция может использовать в своем теле указатель this.
При этом выражение this представляет адрес объекта, вызвавшего функцию, а
выражение *this представляет сам объект.
В языке С++ для класса кроме дружественной функции можно объявить
дружественной класс. Все компонентные функции дружественного класса
имеют доступ
к частным и защищенным компонентам того класса, в котором
он объявлен другом. Для того чтобы предоставить некоторому классу (назо-
вем его класс1) свойства друга другого класса (класс2) необходимо в теле
класса2 поместить следующую строку:
friend class имя_класса1;
После такого определения любая компонентная функция класса1 будет
иметь доступ к
любой компоненте класса2 независимо от присвоенной ей об-
ласти видимости. Рассмотрим пример взаимодействия дружественных клас-
сов.
//Листинг 17. Дружественный класс
#include <iostream.h>
#include <conio.h>
#include <string.h>
class bank;
class client
{ friend class bank; //объявляем класс bank дружественным классу client
client *next; //адрес следующего клиента в списке клиентов банка
char * name;
char numb[10];
float value;
static float percent;
client(char* ,char *,float);
void PrintClient() { cout<<"\nВывод инф-ии о клиенте\n"<<
name<<'\t'<<numb<<'\t'<<value;}
void ReadClient() { cout<<"\nВвод инф-ии о клиенте\n";
cin>>name>>numb>>value;}
static void ChangePercent(float p) { percent=p; }
void Add(float dx) { value+=dx; }
void AddPercent() { value*=percent+1; }
~client() { delete [] name;}
};
       Таким образом, благодаря преобразованиям транслятора, любая нестати-
ческая компонентная функция может использовать в своем теле указатель this.
При этом выражение this представляет адрес объекта, вызвавшего функцию, а
выражение *this представляет сам объект.
       В языке С++ для класса кроме дружественной функции можно объявить
дружественной класс. Все компонентные функции дружественного класса
имеют доступ к частным и защищенным компонентам того класса, в котором
он объявлен другом. Для того чтобы предоставить некоторому классу (назо-
вем его класс1) свойства друга другого класса (класс2) необходимо в теле
класса2 поместить следующую строку:
       friend class имя_класса1;
       После такого определения любая компонентная функция класса1 будет
иметь доступ к любой компоненте класса2 независимо от присвоенной ей об-
ласти видимости. Рассмотрим пример взаимодействия дружественных клас-
сов.
//Листинг 17. Дружественный класс
#include 
#include 
#include 
class bank;
class client
  { friend class bank;       //объявляем класс bank дружественным классу client
   client *next;             //адрес следующего клиента в списке клиентов банка
   char * name;
   char numb[10];
   float value;
   static float percent;
   client(char* ,char *,float);
   void PrintClient() { cout<<"\nВывод инф-ии о клиенте\n"<<
                          name<<'\t'<>name>>numb>>value;}
   static void ChangePercent(float p) { percent=p; }
   void Add(float dx) { value+=dx; }
   void AddPercent() { value*=percent+1; }
   ~client() { delete [] name;}
  };

                                               37