Hàm Bạn (friend Function) Trong Lập Trình Hướng đối Tượng Với C++

1. Hàm bạn (friend function) là gì?

Ngôn ngữ C++ có một hàm rất đặc biệt gọi là hàm bạn (friend function). Hàm bạn là loại hàm không phải là hàm thành viên của một lớp nhưng có thể truy cập vào các thành phần (kể cả private và public) của lớp đó.

Để một hàm trở thành bạn của một lớp, có 2 cách viết:

Cách 1: Dùng từ khóa friend để khai báo hàm trong lớp và định nghĩa hàm bên ngoài lớp.class Tên_lớp{ private: //Khai báo các thuộc tính public: ... //Khai báo các hàm bạn của lớp Tên_lớp friend void hàm1(Các_tham_số); friend int hàm2(Các_tham_số); ... }; //Định nghĩa các hàm bạn void hàm1(Các_tham_số){ ... } int hàm2(Các_tham_số){ ... }

Cách 2: Dùng từ khóa friend để định nghĩa hàm trong lớp.class Tên_lớp{ private://Khai báo các thuộc tính public: ... //Khai báo các hàm bạn của lớp Tên_Lớp friend void hàm1(Các_tham_số){ ... } friend int hàm2(Các_tham_số){ ... } };

Hàm bạn tuy không phải là hàm thành phần của lớp nhưng có thể truy cập tới các thuộc tính của đối tượng thuộc lớp.

Một hàm có thể là bạn của nhiều lớp. Lúc đó, nó có quyền truy cập tới tất cả các thuộc tính của các đối tượng trong các lớp này. Để một hàm trở thành bạn của các lớp A, B và C, ta viết như sau://Trước hết, phải khai báo các lớp class A; //Khai báo lớp A class B; //Khai báo lớp B class C; //Khai báo lớp C //Định nghĩa lớp A class A{ //Khai báo hàm của A friend void tên_hàm_bạn(Các_tham_số); }; //Định nghĩa lớp B class B{ //Khai báo hàm bạn của B friend void tên_hàm_bạn(Các_tham_số); }; //Định nghĩa lớp C class C{ //Khai báo hàm bạn của C friend void tên_hàm_bạn(Các_tham_số); }; //Xây dựng hàm bạn void tên_hàm_bạn(Các_tham_số){ //Thân hàm };

2. Ví dụ sử dụng hàm friend

Cộng các thành viên của hai lớp khác nhau sử dụng hàm bạn.#include <iostream> using namespace std; class A; //Khai báo lớp A class B; //Khai báo lớp B //Định nghĩa lớp A class A{ private: int numA; public: A(int a){ numA = a; } //Khai báo hàm cong là bạn của A friend int cong(A, B); }; //Định nghĩa lớp B class B{ private: int numB; public: B(int b){ numB = b; } //Khai báo hàm cong là bạn của B friend int cong(A, B); }; //Hàm cong() là hàm bạn của lớp A và B, có thể truy cập thành viên numA và numB int cong(A a, B b){ return (a.numA + b.numB); } void main() { A a(10); B b(20); cout<<"Tong: "<<cong(a, b); system("pause"); }

Kết quả
Tong: 30

3. Lớp bạn (friend class) là gì?

Chúng ta cũng có thể khai báo lớp bạn của một lớp trong C++ với từ khóa friend. Ví dụ:class ClassB; class ClassA { // ClassB is a friend class of ClassA friend class ClassB; ... .. ... } class ClassB { ... .. ... }

Khi một lớp có lớp bạn thì tất cả hàm thành viên của lớp bạn sẽ trở thành hàm bạn của lớp đó.

Trong ví dụ trên, ClassB là lớp bạn của lớp ClassA, chúng ta có thể truy cập tất cả thành viên của lớp ClassA trong lớp ClassB. Nhưng nên nhớ, không thể truy cập các thành viên của lớp ClassB trong lớp ClassA.// C++ program to demonstrate the working of friend class #include <iostream> using namespace std; // forward declaration class ClassB; class ClassA { private: int numA; // friend class declaration friend class ClassB; public: // constructor to initialize numA to 12 ClassA() : numA(12) {} }; class ClassB { private: int numB; public: // constructor to initialize numB to 1 ClassB() : numB(1) {} // member function to add numA // from ClassA and numB from ClassB int add() { ClassA objectA; return objectA.numA + numB; } }; int main() { ClassB objectB; cout << "Sum: " << objectB.add(); return 0; }

Kết quả
Sum: 13

Lớp ClassB là lớp bạn của ClassA, chúng ta cũng có thể tạo các đối tượng của ClassA trong lớp ClassB.

  • Hàm is_object() trong PHP
  • Tham số (parameter) của hàm trong Python
  • Kết nối cơ sở dữ liệu MySQL với PHP sử dụng PDO
  • Các bước lập trình và chạy chương trình với Arduino
  • Ghi đè phương thức (method overriding) khi kế thừa trong Java
5/5 - (2 bình chọn)Bài trước và bài sau trong môn học<< Các thành phần tĩnh (static member) trong lớp (class)Nạp chồng toán tử (operator overloading) trong C++ >>

Từ khóa » Hàm Bạn Là Gì C++