STARTING
CONTROL STATEMENT
FUNCTION
ARRAY & POINTER
OOP
STL
ITERATORS
OTHER FEATURES
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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

Trong bài học hôm nay 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ường khác trong C++. Lớp bạn có khác gì so với lớp thông thường khác trong C++. Chúng ta sẽ cùng tìm hiểu 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ì dữ liệu được bảo vệ (protected) và riêng tư (private) của một lớp có thể được truy cập bằng cách sử dụng hàm.

Nếu các bạn nào chưa biết các khái niệm private, protected, public thì có thể xem lại bài access modifier trong C++ ở bài trước nhé.

Cú pháp

Bài viết này được đăng tại [free tuts .net]

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 giản về hàm bạn (Friend function) trong C++ như sau:

Ví dụ
#include <iostream>    
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)<<endl;    
    return 0;    
}

Và kết 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ỏ thishàm xây dựng trong C++, nếu bạn nào chưa biết thì có thể xem lại ở các 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 <iostream>  
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à kết quả 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 vì vậy hàm TimGiaTriNhoNhat có thể truy cập dữ 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 tìm hiểu ở phần sau đây.

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

Một lớp bạn (friend class) có thể truy cập cả các 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 giản về lớp bạn (friend class) trong C++ như sau:

Ví dụ
#include <iostream>  
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à kết quả 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 có thể truy cập các 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 các 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ì 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 hôm nay ở đây. Bài học tiếp theo chúng ta sẽ cùng tìm hiểu về các hàm tính toán trong C++. Các bạn nhớ theo dõi nhé.

Cùng chuyên mục:

Kiểm tra chuỗi có phải là chuỗi pangram hay không trong C

Kiểm tra chuỗi có phải là chuỗi pangram hay không trong C

Loại bỏ các từ trùng lặp trong một chuỗi trong C

Loại bỏ các từ trùng lặp trong một chuỗi trong C

Chuyển đổi một số thành chuỗi số tiếng Anh trong C

Chuyển đổi một số thành chuỗi số tiếng Anh trong C

Tìm chuỗi con dài nhất không chứa ký tự trùng lặp trong C

Tìm chuỗi con dài nhất không chứa ký tự trùng lặp trong C

Chuyển đổi số nguyên sang dạng chuỗi và ngược lại trong C

Chuyển đổi số nguyên sang dạng chuỗi và ngược lại trong C

Kiểm tra số nguyên tố và số hoàn hảo trong C

Kiểm tra số nguyên tố và số hoàn hảo trong C

Tính lũy thừa của một số nguyên trong C

Tính lũy thừa của một số nguyên trong C

Tính phần dư của phép chia hai số nguyên trong C

Tính phần dư của phép chia hai số nguyên trong C

Tính tổng, hiệu, tích, thương của hai số nguyên trong C

Tính tổng, hiệu, tích, thương của hai số nguyên trong C

Sử dụng con trỏ để tính tổng các phần tử trong mảng trong C

Sử dụng con trỏ để tính tổng các phần tử trong mảng trong C

Sử dụng con trỏ để đảo ngược một chuỗi trong C

Sử dụng con trỏ để đảo ngược một chuỗi trong C

Sắp xếp một mảng số nguyên sao cho số lẻ nằm trước số chẵn trong C

Sắp xếp một mảng số nguyên sao cho số lẻ nằm trước số chẵn trong C

Sắp xếp một mảng chuỗi theo thứ tự từ điển trong C

Sắp xếp một mảng chuỗi theo thứ tự từ điển trong C

Sắp xếp một mảng số nguyên theo thứ tự tăng dần hoặc giảm dần trong C

Sắp xếp một mảng số nguyên theo thứ tự tăng dần hoặc giảm dần trong C

Tìm phần tử lớn thứ k trong mảng trong C

Tìm phần tử lớn thứ k trong mảng trong C

Xóa phần tử trùng lặp trong mảng trong C

Xóa phần tử trùng lặp trong mảng trong C

Đảo ngược mảng không sử dụng mảng phụ trong C

Đảo ngược mảng không sử dụng mảng phụ trong C

Tìm số lần xuất hiện của một phần tử trong mảng trong C

Tìm số lần xuất hiện của một phần tử trong mảng trong C

Tìm giá trị lớn nhất và nhỏ nhất trong một mảng trong C

Tìm giá trị lớn nhất và nhỏ nhất trong một mảng trong C

Tách chuỗi thành các từ riêng lẻ và in ra màn hình trong C

Tách chuỗi thành các từ riêng lẻ và in ra màn hình trong C

Top