Friend function

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ểmNhượ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 friend khi 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

Leave a Comment