C++ Урок 20: Дружественные функции — Просто и понятно

Дружественные функции в 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++, позволяющий гибко управлять доступом к данным внутри класса. Их применение просто и эффективно, обеспечивая баланс между инкапсуляцией и необходимым внешним доступом к данным.

Что будем искать? Например,программа