friend function là một hàm không nằm trong class, nhưng được phép truy cập vào tất cả thành phần private và protected của lớp.
| Ưu điểm | Nhược điểm |
| Truy cập trực tiếp dữ liệu private/protected. | Phá vỡ tính đóng gói (Encapsulation). |
| Hữu ích khi overload operator. | Tạo sự phụ thuộc giữa các lớp/hàm. |
| Giúp các lớp liên quan làm việc với nhau dễ dàng. | Lạm dụng làm mã nguồn khó bảo trì. |
| Có thể tăng hiệu suất vì không cần nhiều hàm getter (accesor) |
Chỉ dùng
friendkhi thật sự cần thiết, đặc biệt là cho overload toán tử (<<,>>,+,-,==). Nếu có thể giải quyết bằng public method hoặc getter/setter thì nên ưu tiên cách đó để giữ tính đóng gói của OOP.

#include <iostream>
using namespace std;
class BankAccount {
private:
double balance;
public:
BankAccount(double b) {
balance = b;
}
// Khai báo friend function
friend double totalBalance(BankAccount a, BankAccount b);
};
// Friend function có thể truy cập thành viên private
double totalBalance(BankAccount a, BankAccount b) {
return a.balance + b.balance;
}
int main() {
BankAccount acc1(5000);
BankAccount acc2(3000);
cout << "Tong so du: "
<< totalBalance(acc1, acc2) << endl;
return 0;
}
Tong so du: 8000