Дружественные функции в C++ кажутся сложными, но на практике просты. Урок посвящен их практической реализации без избыточной теории.
Создание классов и дружественной функции
Создадим классы A и B, а затем — дружественную функцию sum.
В классе A:
- Приватная переменная x типа int.
- Публичный конструктор, выводящий сообщение и считывающий значение x с клавиатуры.
class A {
private:
int x;
public:
A() {
std::cout << "Введите x: ";
std::cin >> x;
}
friend int sum(A a, B b);
};
В классе B:
- Приватная переменная y типа int.
- Публичный конструктор, аналогичный конструктору класса A, считывающий значение y с клавиатуры.
class B {
private:
int y;
public:
B() {
std::cout << "Введите y: ";
std::cin >> y;
}
friend int sum(A a, B b);
};
Функция sum суммирует переменные x и y:
int sum(A a, B b) {
return a.x + b.y;
}
Ключевое слово friend в классах A и B предоставляет функции sum доступ к их приватным членам.
Проверка работоспособности
В функции main создадим объекты классов A и B, вызовем функцию sum и выведем результат:
int main() {
A objA;
B objB;
std::cout << sum(objA, objB) << std::endl;
return 0;
}
Код компилируется и работает, вычисляя и выводя сумму значений, введенных пользователем.
Применение дружественных функций
Дружественные функции позволяют контролировать доступ к приватным членам класса, предоставляя его только определенным функциям. Это повышает безопасность и модульность кода. Вместо объявления всех необходимых переменных как public, что снижает безопасность и затрудняет сопровождение, можно избирательно предоставлять доступ к частным данным с помощью дружественных функций.
Дружественные функции — мощный инструмент в C++, позволяющий гибко управлять доступом к данным внутри класса. Их применение просто и эффективно, обеспечивая баланс между инкапсуляцией и необходимым внешним доступом к данным.