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

UptoLike

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

33
В последнем примере определены два класса ClassA и ClassB, а также внеш-
няя функция func, объявленная дружественной в обоих классах, благодаря чему
func имеет доступ к частным компонентам x и y классов. При этом функция func
является внешней по отношению к классу функцией и объекты класса должны ли-
бо передаваться ей
в качестве параметров, либо объявляться в теле функции. Не-
явной передачи адреса объекта в дружественную функцию при вызове, как это
осуществляется для компонентных функций класса, не происходит.
Дружественная классу функция может быть компонентной функцией другого
класса. Рассмотрим пример, в котором помимо уже известного класса «клиент
банка», определен класс «банк», и организуется
взаимодействие этих классов.
//Листинг 16. Дружественные функции из других классов.
#include <iostream.h>
#include <conio.h>
#include <string.h>
class bank;
class client
{ char * name;
char numb[10];
float value;
char BankName[20]; //название банка, в котором хранится вклад
static float percent;
public:
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;}
void SetBank(bank&); //функция записи клиента в список клиентов банка
};
float client::percent=0.1;
client::client(char* s="Без имени",char *n="N0000",float x=0)
{ int k=strlen(s);
name=new char[k+1];
strcpy(name,s);
strcpy(numb,n);
value=x;
}
     В последнем примере определены два класса ClassA и ClassB, а также внеш-
няя функция func, объявленная дружественной в обоих классах, благодаря чему
func имеет доступ к частным компонентам x и y классов. При этом функция func
является внешней по отношению к классу функцией и объекты класса должны ли-
бо передаваться ей в качестве параметров, либо объявляться в теле функции. Не-
явной передачи адреса объекта в дружественную функцию при вызове, как это
осуществляется для компонентных функций класса, не происходит.
     Дружественная классу функция может быть компонентной функцией другого
класса. Рассмотрим пример, в котором помимо уже известного класса «клиент
банка», определен класс «банк», и организуется взаимодействие этих классов.
//Листинг 16. Дружественные функции из других классов.
#include 
#include 
#include 
class bank;
class client
   { char * name;
    char numb[10];
    float value;
    char BankName[20]; //название банка, в котором хранится вклад
    static float percent;
    public:
    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;}
    void SetBank(bank&); //функция записи клиента в список клиентов банка
   };
float client::percent=0.1;
client::client(char* s="Без имени",char *n="N0000",float x=0)
{ int k=strlen(s);
  name=new char[k+1];
  strcpy(name,s);
  strcpy(numb,n);
  value=x;
}

                                            33