Дружественные функции в C++ и варианты использования с примерами

Опубликовано: 2022-10-22

Сокрытие данных — это фундаментальный метод разработки программного обеспечения, широко используемый в объектно-ориентированных языках программирования (ООП). Он ограничивает доступ к закрытым членам данных из-за пределов класса. Однако функция C++, известная как функция друга, противоречит принципу сокрытия данных.

В этой статье вы узнаете, что такое функция друга в C++ , что такое класс друга, и изучите некоторые варианты использования с примерами.

Ознакомьтесь с нашими бесплатными технологическими курсами, чтобы получить преимущество над конкурентами.

Оглавление

Что такое функция друга в C++?

Дружественная функция в C++ — это функция, объявленная вне класса, но имеющая доступ к закрытым и защищенным членам класса. Хотя закрытые члены определенного класса недоступны для функций, не являющихся членами, объявление их дружественными функциями дает им доступ к закрытым и защищенным членам классов.

Ознакомьтесь с расширенной сертификацией upGrad в области DevOps

Характеристики функции друга

Функция друга в C++ имеет следующие характеристики:

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

Изучите наши популярные курсы по программной инженерии

Магистр компьютерных наук LJMU и IIITB Программа сертификатов кибербезопасности Caltech CTME
Учебный курс по полной разработке стека Программа PG в блокчейне
Программа Executive PG в Full Stack Development
Посмотреть все наши курсы ниже
Курсы по разработке программного обеспечения

  • Вызов функции друга аналогичен вызову любой обычной функции класса без использования объекта.
  • Мы не можем вызвать функцию друга, используя объект, поскольку он не находится в области действия класса.
  • Дружественные функции в C++ имеют объекты в качестве аргументов.
  • Мы можем объявить функцию друга либо в приватной, либо в публичной части.
  • Имена членов не доступны напрямую функции друга, и она должна использовать оператор членства с точкой и имя объекта с именем члена.

Ознакомьтесь с расширенной сертификацией upGrad по кибербезопасности

Синтаксис функции друга

Чтобы объявить функцию друга, мы используем ключевое слово friend внутри тела класса. Синтаксис функции друга:

класс className {

… .. …

друг returnType имя_функции (список аргументов);

… .. …

}

Востребованные навыки разработки программного обеспечения

Курсы JavaScript Базовые курсы Java Курсы по структурам данных
Курсы Node.js Курсы SQL Курсы разработки полного стека
Курсы НФТ Курсы DevOps Курсы по большим данным
Курсы React.js Курсы по кибербезопасности Курсы облачных вычислений
Курсы по проектированию баз данных Курсы Python Курсы по криптовалюте

Если мы разберем синтаксис, вот что означает каждый термин:

  • друг — это ключевое слово, обозначающее, что функция является функцией друга.
  • returnType — возвращаемый тип функции.
  • functionName — это имя функции, которая стала другом класса.
  • список аргументов — это аргументы, которые мы будем передавать

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Пример дружественной функции C++

Теперь давайте посмотрим на некоторые программы, чтобы проиллюстрировать функцию друга.

Пример 1: дружественная функция C++ для печати высоты коробки

#include <иопоток>

использование пространства имен std;

коробка класса

{

частный:

внутренняя высота;

публичный:

Коробка (): высота (0) { }

друг int printHeight (Box); //функция друга

};

int printHeight (коробка h)

{

высота += 40;

вернуть h.height;

}

основной ()

{

Коробка ч;

cout<<“Высота блока: “<< printHeight(h)<<endl;

вернуть 0;

}

Прочтите наши популярные статьи, связанные с разработкой программного обеспечения

Как реализовать абстракцию данных в Java? Что такое внутренний класс в Java? Идентификаторы Java: определение, синтаксис и примеры
Понимание инкапсуляции в ООП на примерах Объяснение аргументов командной строки в C 10 основных функций и характеристик облачных вычислений в 2022 году
Полиморфизм в Java: концепции, типы, характеристики и примеры Пакеты в Java и как их использовать? Учебник по Git для начинающих: Изучайте Git с нуля

Выход:

Высота коробки:40

Пример 2. Когда дружественная функция C++ дружественна к двум классам

#include <иопоток>

использование пространства имен std;

// предварительное объявление

класс ClassQ;

класс КлассP {

публичный:

// конструктор для инициализации numP значением 12

КлассP() : числоP(12) {}

частный:

целое число;

// объявление дружественной функции

друг int добавить (ClassP, ClassQ);

};

класс ClassQ {

публичный:

// конструктор для инициализации numQ значением 1

КлассQ() : числоQ(1) {}

частный:

число Q;

// объявление дружественной функции

друг int добавить (ClassP, ClassQ);

};

// доступ к членам обоих классов

int add(ClassP objectP, ClassQ objectQ) {

возврат (objectP.numP + objectQ.numQ);

}

интервал основной () {

объектP классаP;

объект Q классаQ;

cout << "Сумма: " << добавить (objectP, objectQ);

вернуть 0;

}

Выход:

Сумма:13

В приведенном выше примере класс P и класс Q объявили add() в качестве дружественной функции, предоставляя ей доступ к закрытым данным обоих классов. Кроме того, функция друга внутри класса P использует класс Q.

Итак, мы делаем предварительное объявление класса Q в программе.

Реализация функции друга

Чтобы лучше понять функцию друга в C++, мы теперь рассмотрим два способа реализации функции друга.

  1. Реализация функции друга на C++ через метод другого класса

Мы объявляем дружественный класс в C++, когда нам нужен доступ к закрытым и защищенным членам другого класса, в котором он объявлен другом. Также можно объявить единственную функцию-член другого класса в качестве друга.

класс имя_класса

{

класс друга friend_class;// объявление класса друга

};

класс друг_класс

{

};

В вышеприведенном объявлении дружественного класса все функции в friend_class являются дружественными функциями class_name .

Вот простой пример, иллюстрирующий реализацию дружественных функций через метод другого класса:

#include <иопоток>

использование пространства имен std;

класс А

{

инт р=4;

друг класса B; //класс друзей

};

класс Б

{

публичный:

пустой дисплей (A & a)

{

cout<<"Значение p равно:" <<ap;

}

};

основной ()

{

А а;

Б б;

  1. дисплей (а);

вернуть 0;

}

Выход:

Значение p равно:4

  1. Реализация глобальной функции

Реализация функции глобального друга позволяет нам получить доступ ко всем защищенным и закрытым членам объявления глобального класса. Вот пример:

#include<iostream>

использование пространства имен std;

пространство класса

{

в а;

интервал б;

интервал с;

публичный:

пустые наборы данных (int x, int y, int z);

недействительный дисплей (недействительный);

друг оператор пустоты- (пробел &s);

};

пустое пространство ::setdata (int x, int y, int z)

{

а=х; б=у; с=г;

}

пустое пространство:: дисплей (пустое)

{

cout<<a<<” “<<b<<” “<<c<<“\n”;

}

void оператор- (пробел &s)

{

са =- са;

сб =- сб;

сбн =- сбн;

}

основной ()

{

пробел с;

  1. установить данные (9,2,3);

cout<<«s:»;

  1. отображать ();

-с;

cout<<“-s:”;

  1. отображать ();

вернуть 0;

}

Выход:

с: 9 2 3

-с: -9 -2 -3

В приведенном выше примере программы operator- — это дружественная функция, которую мы глобально объявили в области видимости класса.

Что такое класс друзей в C++?

Хотя это уже достаточно очевидно, дружественный класс — это класс, который имеет доступ как к закрытым, так и к защищенным членам класса, в котором он объявлен другом.

Проще говоря, дружественный класс в C++ используется, когда мы хотим, чтобы класс имел доступ к закрытым и защищенным членам другого класса.

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

Синтаксис класса Friend

Вот синтаксис дружественного класса в C++:

класс Р; //предварительное объявление

класс Р{

// Другие объявления

друг класса R;

};

класс R{

// Объявления

};

На приведенном выше рисунке класс R является другом класса P. В результате класс R может получить доступ к закрытым элементам данных класса P. Однако обратное неверно, и класс P не может получить доступ к закрытым элементам данных класса R. .

Кроме того, предварительное объявление дается для информирования компилятора о существовании сущности до того, как она будет определена по категориям. Здесь мы объявляем класс R, используя предварительное объявление, чтобы уведомить компилятор о его существовании. Предварительное объявление позволяет нам использовать объекты класса R в классе P.

Какая польза от функции друга в C++?

Подводя итоги нашего обсуждения, давайте рассмотрим два основных варианта использования функции friend в C++:

  • Во-первых, мы используем функцию друга, когда хотим получить доступ к закрытым и защищенным членам класса. Для этого нам обычно требуется, чтобы объекты этого класса обращались к закрытым и защищенным членам. Однако функция друга устраняет ситуацию, когда функция должна быть членом класса, чтобы получить доступ.
  • Другое использование функции друга в C++ — перегрузка операторов. Функции с одинаковыми именами, но разными номерами и аргументами называются перегружающими функциями. Дружественные функции в C++ находят применение при перегрузке операторов.

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

На этом мы подошли к концу нашего обсуждения функции друга в C++ и ее использовании. Надеюсь, это поможет вам расширить ваши знания о C++.

Кроме того, если вы хотите начать свою карьеру в качестве разработчика полного стека, upGrad предлагает полностью онлайн- программу Executive Post Graduate Programme в области разработки программного обеспечения — специализация в разработке полного стека на 13 месяцев в сотрудничестве с IIIT Bangalore.

Основные моменты программы:

  • Практическое знакомство с отраслевыми кейсами и заданиями
  • 450+ часов обучения на 360 градусов
  • 10+ лучших инструментов и языков программирования
  • Карьерное наставничество 1:1 Сессии с отраслевыми наставниками
  • Круглосуточная поддержка студентов

Зарегистрируйтесь сегодня, чтобы получить эксклюзивные преимущества upGrad уже сегодня!

Что такое функция друга в C++?

Дружественная функция в C++ — это функция, которая не является членом класса, но имеет доступ к его закрытым и защищенным членам.

Как объявить функцию друга?

Функция друга имеет доступ к закрытым и защищенным данным класса. Чтобы объявить функцию друга, мы используем ключевое слово friend внутри тела класса.

Как сделать классного друга на C++?

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