Hàm Friend trong C++

Hàm friend trong C++ của một lớp được định nghĩa bên ngoài phạm vi lớp đó, nhưng nó có quyền truy cập tất cả thành viên private và protected của lớp đó. Ngay cả khi các nguyên mẫu cho hàm friend xuất hiện trong định nghĩa lớp, thì các hàm friend không là các hàm thành viên. Để tìm hiểu hàm friend trong C++, mời bạn đọc tham khảo bài viết dưới đây của eLib.VN

Hàm Friend trong C++

Nếu một hàm được định nghĩa là một hàm friend trong C++, thì dữ liệu private và protected của một lớp có thể được truy cập bằng cách sử dụng hàm.

Để truy cập dữ liệu, việc khai báo hàm friend nên được thực hiện bên trong phần thân của một lớp bắt đầu bằng từ khóa friend.

1. Khai báo hàm friend trong C++

class class_name {   
    friend data_type function_name(cac_doi_so);
};   

Trong khai báo trên, hàm friend được khai báo bởi từ khóa friend. Hàm này có thể được định nghĩa ở bất cứ đâu trong chương trình như hàm C++ bình thường.

Đặc điểm của hàm Friend:

  • Hàm không nằm trong phạm vi của lớp mà nó đã được khai báo là friend.
  • Nó không thể được gọi bằng cách sử dụng đối tượng vì nó không nằm trong phạm vi của lớp đó.
  • Nó có thể được gọi như một hàm bình thường mà không cần sử dụng đối tượng.
  • Nó không thể truy cập trực tiếp vào tên thành viên và phải sử dụng tên đối tượng và dấu chấm toán tử với tên thành viên.
  • Nó có thể được khai báo trong phần private hoặc public.

2. Ví dụ hàm friend trong C++

Ví dụ 1: hàm friend trong C++ được sử dụng để in chiều dài của Box.

#include <iostream>

using namespace std;

class Box {
private:
    int length;

public:
    Box() : length(0) {}
    friend int printLength(Box); //ham friend
};

int printLength(Box b) {
    b.length += 10;
    return b.length;
}

int main() {
    Box b;
    cout << "Chieu dai cua box: " << printLength(b) << endl;
    return 0;
}

Kết quả:

Chieu dai cua box: 10

Ví dụ 2: hàm friend được sử dụng trong 2 lớp:

#include <iostream>
using namespace std;
class B; // khai bao lop B
class A {
    int x;

public:
    void setdata(int i) {
        x = i;
    }
    friend void min(A, B); // ham friend
};
class B {
    int y;

public:
    void setdata(int i) {
        y = i;
    }
    friend void min(A, B); // ham friend
};

void min(A a, B b) {
    if (a.x <= b.y)
        std::cout << a.x << std::endl;
    else
        std::cout << b.y << std::endl;
}
int main() {
    A a;
    B b;
    a.setdata(10);
    b.setdata(20);
    min(a, b);
    return 0;
}

Kết quả:

10

Trong ví dụ trên, hàm friend min() được sử dụng trong hai lớp, nghĩa là hàm min() có thể truy cập các thành viên riêng của cả hai lớp A và B.

3. Lớp Friend trong C++

Một lớp friend có thể truy cập cả các thành viên private và protected của lớp mà nó đã được khai báo là friend.

Ví dụ:

#include <iostream>

using namespace std;

class A {
    int x = 5;
    friend class B; // lop friend
};
class B {
public:
    void display(A &a) {
        cout << "Gia tri cua x la: " << a.x;
    }
};

int main() {
    A a;
    B b;
    b.display(a);
    return 0;
}
Kết quả:
Gia tri cua x la: 5
Trên đây là bài viết của eLib.VN về Hàm Friend trong C++. Hy vọng qua bài viết, các bạn biết được cú pháp và sử dụng hàm friend trong C++ phù hợp. Chúc các bạn thành công.
Ngày:28/10/2020 Chia sẻ bởi:

CÓ THỂ BẠN QUAN TÂM