Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khi nào nên dùng 'friend' trong C++?

Hàm bạn (friend function) của một lớp được định nghĩa bên ngoài phạm vi lớp đó nhưng có quyền truy cập tất cả thành viên private và protected của lớp. Dù nguyên mẫu hàm bạn xuất hiện trong định nghĩa lớp, chúng không phải là hàm thành viên.

Một friend có thể là hàm, hàm mẫu, hàm thành viên, hoặc một lớp/lớp mẫu, trong trường hợp này toàn bộ lớp và tất cả thành viên của nó đều là friend.

Để khai báo hàm là friend của lớp, đặt từ khóa friend trước nguyên mẫu hàm trong định nghĩa lớp:

class Box {
    double width;
public:
    double length;
    friend void printWidth(Box box);
    void setWidth(double wid);
};

Để khai báo tất cả hàm thành viên của ClassTwo là friend của ClassOne, đặt khai báo sau trong định nghĩa ClassOne:

friend class ClassTwo;

Ví dụ

#include <iostream>
using namespace std;

class Box {
    double width;
public:
    friend void printWidth(Box box);
    void setWidth(double wid);
};

void Box::setWidth(double wid) {
    width = wid;
}

void printWidth(Box box) {
    /* Vì printWidth() là friend của Box, nó có thể
       truy cập trực tiếp bất kỳ thành viên nào của lớp này */
    cout << "Width of box: " << box.width << endl;
}

int main() {
    Box box;
    box.setWidth(10.0);
    printWidth(box);
    return 0;
}

Kết quả

Width of box: 10

Dù hàm không phải thành viên của lớp, nó vẫn truy cập trực tiếp biến thành viên. Điều này rất hữu ích trong một số tình huống.