Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Дружественные функции

Омск 2007 | Задания к лабораторной работе 1 | Class Boolean | Boolean dequeue::relocate(). | Задания к лабораторной работе 2 | НАСЛЕДОВАНИЕ | Class Teach: public Student | Class X | Задания к лабораторной работе 3 | ПОЛИМОРФИЗМ. ПЕРЕГРУЗКА ОПЕРАЦИЙ И ФУНКЦИЙ |


Читайте также:
  1. I. Перепишите следующие предложения и переведите их на русский язык, обращая внимание на функции инфинитива.
  2. I. Понятие об эмоциях, их структура и функции. Механизмы психологической защиты
  3. III. Исследование функции почек по регуляции кислотно-основного состояния
  4. III. Функции Бюро контрольных работ
  5. III. Функции действующих лиц
  6. III. Функции Родительского комитета
  7. III. Цели, задачи и функции торговых предприятий

Дружественной функцией класса называется функция, которая, не являясь его компонентом, имеет доступ к его защищённым и собственным компонентам. Для реализации прав друга функция должна быть описана в теле класса со спецификатором 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

mybiblioteka.su - 2015-2024 год. (0.006 сек.)