Читайте также:
|
|
Дружественной функцией класса называется функция, которая, не являясь его компонентом, имеет доступ к его защищённым и собственным компонентам. Для реализации прав друга функция должна быть описана в теле класса со спецификатором friend («друг»). Пример класса с дружественной функцией:
# include <conio.h> // консольные функции в текстовом режиме
class charlocus // класс – "символ в заданной позиции экрана"
{
protected:
int x,y; // координаты на экране
char cc; // значение символа связанного с этими координатами
// прототип дружественной функции для замены символа:
friend void frnd_put(charlocus *, char);
public:
charlocus(int xi, int yi, char ci) // конструктор без параметров по умолчанию
{ x = xi;
y = yi;
cc = ci;
}
void display (void) // вывод символа на экран
{ gotoxy(x,y);
putch(cc);
}
};
// описание дружественной функции замены символа в конкретном объекте:
void frnd_put (charlocus *p, char c)
{ p->cc=c; }
void main()
{ charlocus D(20,4,'d'); // создать объект с помощью конструктора
charlocus S(10,10,'s'); // создать объект с помощью конструктора
clrscr(); // обновить устройство вывода
D.display(); // печать "d" в позицию 20,34
getch(); // ожидание нажатия клавиши
S.display(); // печать "s" в позицию 10,10
getch(); // ожидание нажатия клавиши
frnd_put(&D,'*'); // подмена символа "d" на "*" в объекте D
D.display(); // печать "*" в позицию 20,34
getch(); // ожидание нажатия клавиши
frnd_put(&S,'#'); // подмена символа "s" на "#" в объекте S
S.display(); // печать "#" в позицию 10,10
getch(); // ожидание нажатия клавиши
}
Программа последовательно выводит на экран d (в позицию 20,4), s (в позицию 10,10), * (в позицию 20,4), # (в позицию 10,10).
Функция frnd_put() описана в классе charlocus как дружественная функция и определена обычным образом как глобальная функция (вне класса, без указания его имени, без операции :: и без спецификатора friend). Как дружественная, она получает доступ к защищённым (protected) данным класса и изменяет значение символа того объекта, адрес которого будет передан ей как значение первого параметра.
Функция может быть дружественной по отношению к нескольким классам:
class CL2;
Дата добавления: 2015-07-25; просмотров: 49 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Задания к лабораторной работе 4 | | | Задания к лабораторной работе 5 |