Рекомендуем, 2022

Выбор редакции

Разница между функцией друга и классом друга

Функция Friend и класс Friend - это методы, используемые для доступа к закрытым членам класса с помощью ключевого слова friend. Общее различие между функцией-другом и классом-другом заключается в том, что при использовании функции-друга доступ к закрытым членам класса возможен, но в классе-другом доступны только имена класса-друга, а не частные члены класса.

Дружественная функция, используемая функцией или классом, может оказать негативное влияние на объектно-ориентированную среду, поскольку она ослабляет инкапсуляцию, которая противоречит объектно-ориентированной парадигме. Это причина, по которой функция друга должна использоваться с умом, иначе она может нарушить скрытие данных в коде.

Эта особенность друга не является ни коммутативной, ни транзитивной . X - друг Y, не означает, что Y - также друг X. Если X - друг Y, а Y - друг Z, это не означает, что X - друг Z.

Сравнительная таблица

Основа для сравненияФункция другаДруг класс
основнойЭто функция, используемая с ключевым словом friend для предоставления доступа к частным членам класса, не являющимся членами функции.Это класс, используемый с ключевым словом friend для доступа к закрытым членам другого класса.
Форвардная декларацияДолжен быть использован.Не обязательно.
использованиеДругую функцию можно использовать в некоторых ситуациях перегрузки оператора.Класс друга может использоваться, когда класс создается поверх другого класса.

Определение функции друга

Функция Friend используется для доступа к закрытым и защищенным членам класса, позволяя функции, не являющейся членом, получить доступ. В этом типе функции ключевое слово friend используется перед именем функции во время объявления. Есть некоторые ограничительные условия, применяемые к функции друга. Первое условие - функция друга не наследуется дочерним классом. Второе условие заключается в том, что спецификатор класса хранения может отсутствовать в функции Friend, что означает, что он не может быть объявлен как static и extern.

Функция Friend не вызывается с вызывающим объектом класса. Примеры функции-друга: глобальная функция, функция-член класса, шаблон функции может быть функцией-другом. Давайте разберемся с помощью примера.

 #include использование пространства имен std; class first {int data; public: first (int i): data (i) {} показ друга void (const first & a); }; void display (const first & a) {cout << "data =" < 

Определение класса друга

Подобно функции друга, мы можем сделать один класс другом другого класса, который называется классом друга . Так что класс друга может получить доступ к закрытым членам, определенным в другом классе. Важно помнить, что класс друга может получать доступ только к именам, определенным в другом классе, а не наследовать другой класс. Именно члены первого класса не могут стать членами класса друзей. Эти классы друзей редко используются.

Класс Friend может быть объявлен более чем в одном классе. Он рассматривается как короткий альтернативный метод для функции-друга, потому что с помощью этого мы можем создать класс-друг, который может получить доступ ко всем элементам данных и функциям вместо создания нескольких функций-друзей.

 #include использование пространства имен std; class First {// Объявить друга class друг class Second; public: First (): a (0) {} void print () {cout << "Результат" << a << endl; } private: int a; }; class Second {public: void change (First & yclass, int x) {yclass.a = x; }}; int main () // Выходные данные Результат 0 Результат 5 

Ключевые различия между функцией Friend и классом Friend

  1. Функция Friend - это функция, которая может получить доступ к закрытым и защищенным членам класса. Напротив, класс друга - это класс, который помогает в доступе к закрытым членам класса.
  2. Функция друга объявляется включением ее прототипа внутри класса, предшествующего ему с ключевым словом friend. Аналогично, класс друга также определяется с помощью ключевого слова friend.
  3. Форвардное объявление используется в случае дружественной функции, в отличие от него, нет необходимости использовать его в другом классе.

Заключение

Функция Friend требуется, когда функции требуется доступ к двум или более независимым классам, внутренним членам. С другой стороны, класс друга необходим, когда класс требует доступа к членам другого класса. Когда функция-член должна быть другом этой функции, в этом случае лучше использовать класс друга.

Top