Дружественные функции в 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++, мы теперь рассмотрим два способа реализации функции друга.
- Реализация функции друга на C++ через метод другого класса
Мы объявляем дружественный класс в C++, когда нам нужен доступ к закрытым и защищенным членам другого класса, в котором он объявлен другом. Также можно объявить единственную функцию-член другого класса в качестве друга.
класс имя_класса
{
класс друга friend_class;// объявление класса друга
};
класс друг_класс
{
};
В вышеприведенном объявлении дружественного класса все функции в friend_class являются дружественными функциями class_name .
Вот простой пример, иллюстрирующий реализацию дружественных функций через метод другого класса:
#include <иопоток>
использование пространства имен std;
класс А
{
инт р=4;
друг класса B; //класс друзей
};
класс Б
{
публичный:
пустой дисплей (A & a)
{
cout<<"Значение p равно:" <<ap;
}
};
основной ()
{
А а;
Б б;
- дисплей (а);
вернуть 0;
}
Выход:
Значение p равно:4
- Реализация глобальной функции
Реализация функции глобального друга позволяет нам получить доступ ко всем защищенным и закрытым членам объявления глобального класса. Вот пример:
#include<iostream>
использование пространства имен std;
пространство класса
{
в а;
интервал б;
интервал с;
публичный:
пустые наборы данных (int x, int y, int z);
недействительный дисплей (недействительный);
друг оператор пустоты- (пробел &s);
};
пустое пространство ::setdata (int x, int y, int z)
{
а=х; б=у; с=г;
}
пустое пространство:: дисплей (пустое)
{
cout<<a<<” “<<b<<” “<<c<<“\n”;
}
void оператор- (пробел &s)
{
са =- са;
сб =- сб;
сбн =- сбн;
}
основной ()
{
пробел с;
- установить данные (9,2,3);
cout<<«s:»;
- отображать ();
-с;
cout<<“-s:”;
- отображать ();
вернуть 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++. Ключевое слово позволяет любому классу получить доступ к закрытым и защищенным членам других классов и функций.