Hàm bạn (Friend function) và lớp bạn (Friend Class) trong C++

Trong bài học kinh nghiệm ngày hôm nay tất cả chúng ta sẽ tìm hiều về hàm bạn ( Friend function ) và lớp bạn ( Friend Class ) trong C + +. Vậy hàm bạn có gì khác so với hàm thường thì khác trong C + +. Lớp bạn có khác gì so với lớp thường thì khác trong C + +. Chúng ta sẽ cùng tìm hiểu và khám phá trong nội dung sau đây .

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

1. Hàm bạn trong C++

Nếu một hàm được định nghĩa là một hàm bạn ( Friend function ) trong C + +, thì tài liệu được bảo vệ ( protected ) và riêng tư ( private ) của một lớp hoàn toàn có thể được truy vấn bằng cách sử dụng hàm .
Nếu những bạn nào chưa biết những khái niệm private, protected, public thì hoàn toàn có thể xem lại bài access modifier trong C + + ở bài trước nhé .
Cú pháp
Cú pháp để khai báo hàm bạn ( Friend function ) trong C + + như sau :

class TenLop    
{    
    friend KieuDuLieu TenHam([Tham so]);
};    

Ví dụ

Chúng ta cùng xem xét một ví dụ đơn thuần về hàm bạn ( Friend function ) trong C + + như sau :

Ví dụ

#include     
using namespace std;    
class HinhChuNhat {    
    private:    
        int chieuDai;
        int chieuRong;
    public:
        HinhChuNhat(int chieuDai, int chieuRong) {
            this->chieuDai = chieuDai;
            this->chieuRong = chieuRong;
        }
        HinhChuNhat(): chieuDai(0) { }    
        friend int HienThiChieuDai(HinhChuNhat); //friend function    
};    
int HienThiChieuDai(HinhChuNhat hcn) {    
    hcn.chieuDai += 10;    
    return hcn.chieuDai;    
}    

int main() {    
    HinhChuNhat hcn = HinhChuNhat(10, 20);    
    cout << "Chieu dai cua hinh chu nhat la: " << HienThiChieuDai(hcn)<Và hiệu quả sau khi thực thi chương trình trên như sau :

friend p1 JPG

Ở ví dụ trên mình có sử dụng con trỏ this và hàm thiết kế xây dựng trong C + +, nếu bạn nào chưa biết thì hoàn toàn có thể xem lại ở những bài trước nhé . Chúng ta cùng xem tiếp một ví dụ nữa về hàm bạn giữa 2 lớp trong C + + như sau :

Ví dụ

#include   
using namespace std;  
class Lop2;          
class Lop1 {  
    int a;  
    public:  
        void ThietLapGiaTriA(int a)      {  
            this->a = a;  
        }
        void HienThi() {
            cout << "Lop 1, a = " << a << endl;
        }
        friend void TimGiaTriNhoNhat(Lop1, Lop2);       
};  
class Lop2  {  
    int b;  
    public:  
        void ThietLapGiaTriB(int b)  {  
            this->b = b;  
        }
        void HienThi() {
            cout << "Lop 2, b = " << b << endl;
        }
        friend void TimGiaTriNhoNhat(Lop1, Lop2); 
};  
void TimGiaTriNhoNhat(Lop1 l1, Lop2 l2)  {
    cout << "Gia tri nho nhat trong 2 lop la: ";
    if(l1.a <= l2.b)  
        cout << l1.a << endl;  
    else  
        cout << l2.b << endl;  
}  
int main()  {  
   Lop1 l1;  
   Lop2 l2;  
   l1.ThietLapGiaTriA(7);  
   l2.ThietLapGiaTriB(9);
   l1.HienThi();
   l2.HienThi();
   TimGiaTriNhoNhat(l1, l2);  
   return 0;  
 } 

Và tác dụng sau khi thực thi chương trình trên như sau :

friend p2 JPG

Ở ví dụ trên hàm TimGiaTriNhoNhat là hàm bạn của cả hai lớp Lop1 và Lop2 thế cho nên hàm TimGiaTriNhoNhat hoàn toàn có thể truy vấn tài liệu thành viên private của cả hai lớp .
Trong C + + có hổ trợ thêm khái niệm khác nữa đó là lớp bạn ( Friend class ). Vậy lớp bạn là gì ? Chúng ta sẽ cùng khám phá ở phần sau đây .

2. Lớp bạn (Friend class)

Một lớp bạn ( friend class ) hoàn toàn có thể truy vấn cả những thành viên riêng tư và được bảo vệ của lớp mà nó đã được khai báo là friend .

Ví dụ

Chúng ta cùng xem một ví dụ đơn thuần về lớp bạn ( friend class ) trong C + + như sau :

Ví dụ

#include   
using namespace std;  
class Lop1 {  
    int a = 10;  
    friend class Lop2;          
};  
class Lop2 {  
  public:  
    void HienThi(Lop1 &l1) {  
        cout << "Gia tri cua a la: "<< l1.a;  
    }  
};  
int main() {  
    Lop1 l1;  
    Lop2 l2;  
    l2.HienThi(l1);  
    return 0;  
} 

Và tác dụng sau khi thực thi chương trình trên như sau :

friend p3 JPG

Trong ví dụ trên, Lop2 được khai báo là friend trong lớp Lop1. Do đó, Lop2 là bạn của Lop1. Lop2 hoàn toàn có thể truy vấn những thành viên private của Lop1 .

3. Kết luận

Như vậy là chúng ta đã tìm hiểu xong về hàm bạn (friend function) và lớp bạn (friend class) trong C++ là gì rồi.

Nếu những bạn muốn truy xuất thành viên của lớp ở dạng private hoặc protected từ một hàm hoặc lớp khác thì tất cả chúng ta sử dụng hàm bạn hoặc lớp bạn .
Vậy mình sẽ kết thúc bài học kinh nghiệm ngày hôm nay ở đây. Bài học tiếp theo tất cả chúng ta sẽ cùng tìm hiểu và khám phá về những hàm đo lường và thống kê trong C + +. Các bạn nhớ theo dõi nhé .