What Is the Friends Function and How to Master It in Any Language
Friends functions (друзья функции) - это функции, которые имеют доступ к приватным и защищенным членам класса, но они не являются членами этого класса. Friends функции могут быть определены вне класса, но они могут быть объявлены и зарегистрированы в качестве друзей внутри класса.
Ключевое слово friend используется для объявления функции в качестве друга класса. Синтаксис объявления друзей класса выглядит следующим образом:
c++
class ClassName {
// Объявления класса
friend ReturnType FunctionName(Parameters);
};
Преимуществом использования friends функций является доступ к защищенным и приватным членам класса без создания лишних методов доступа (getter и setter). Кроме того, это позволяет более точно контролировать доступ к данным класса и при необходимости установить ограничения на доступ различных функций к некоторым частям класса.
Рассмотрим пример:
c++
class BankAccount {
private:
double balance;
public:
BankAccount(double balance) {
this->balance = balance;
}
// Friends function
friend void withdrawal(BankAccount &account, double amount) {
if(account.balance >= amount) {
account.balance -= amount;
cout << "Withdrawal succeeded! New balance: " << account.balance << endl;
}
else {
cout << "Withdrawal failed! Insufficient balance." << endl;
}
}
};
int main() {
BankAccount my_account(5000);
withdrawal(my_account, 1000); // Friends function can access private member: balance
withdrawal(my_account, 6000); // Friend function can access private member: balance
return 0;
}
В данном примере, функция `withdrawal` имеет доступ к закрытому полю `balance` класса `BankAccount` и может изменять его значение. Однако, она не является членом классов `BankAccount`. Таким образом, мы можем управлять доступом к `balance` и ограничивать его изменение только отдельным доверенным функциям, не делая поля `balance` и `withdrawal` открытыми для доступа из любого места в программе.
В заключении, Friends функции очень полезны в случаях, когда нам нужен более гибкий доступ к закрытым членам класса. Однако, следует быть осторожными с их использованием и не злоупотреблять друзьями, чтобы избежать нарушения принципов инкапсуляции.