Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

1.7. Друзья классов 1.7.1. Дружественная функция

Лекция



Привет, сегодня поговорим про друзья классов, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое друзья классов, дружественная функция , настоятельно рекомендую прочитать все из категории С++ (C plus plus).

  дружественная функция  – это функция, которая, не являясь компонентом класса, имеет доступ к его защищенным и собственным компонентам. Такая функция должна быть описана в теле класса со спецификатором friend.

Пример 1.7.1

 

Пример 1.7.1

 

class myclass

 

{

 

  int x,y;

 

  friend void set(myclass*,int,int);

 

public:

 

  myclass(int x1,int y1){x = x1; y = y1;}

 

  int sum(void){return (x+y);}

 

};

 

 

 

void set(myclass *p,int x1,int y1){p–>x = x1; p–>y = y1;}

 

void main(void)

 

{

 

  myclass A(5,6);

 

  myclass B(7,8);

 

  cout<<A.sum();

 

  cout<<B.sum();

 

  set(&A,9,10);

 

  set(&B,11,12);

 

  cout<<A.sum();

 

  cout<<B.sum();

 

}

 

     Функция set описана в классе myclass как дружественная и определена как обычная глобальная функция  (вне класса, без указания его имени, без операции  ‘ : : ‘ и без спецификатора friend).

     Дружественная функция  при вызове не получает указатель this. Об этом говорит сайт https://intellect.icu . Объекты класса должны передаваться дружественной функции только через параметр.

Итак, дружественная функция:

·      не может быть компонентной функцией того класса, по отношению к которому определяется как дружественная;

·      может быть глобальной функцией;

·      может быть компонентной функцией  другого ранее определенного класса.

Например,

class CLASS1
{. . .
int f(. . .);
. . .
};
class CLASS2
{. . .
  friend int CLASS1 : : f(. . .);
  . . .
};

// В этом примере класс CLASS1  с помощью своей компонентной функции  f( )
// получает доступ к компонентам класса CLASS2.

·       может быть дружественной по отношению к нескольким классам;

Например,

// предварительное не полное определение класса

class CL2;
class CL1
{friend void f(CL1,CL2);
. . .
};
class CL2
{friend void f(CL1,CL2);
  . . . 
};

// В этом примере функция  f  имеет доступ к компонентам классов  CL1  и  CL2.

 

В общем, мой друг ты одолел чтение этой статьи об друзья классов. Работы впереди у тебя будет много. Смело пиши комментарии, развивайся и счастье окажется в твоих руках. Надеюсь, что теперь ты понял что такое друзья классов, дружественная функция и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории С++ (C plus plus)

Из статьи мы узнали кратко, но содержательно про друзья классов
создано: 2015-12-20
обновлено: 2021-03-13
139



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

С++ (C plus plus)

Термины: С++ (C plus plus)