Hàm friend của một lớp được định nghĩa bên ngoài phạm vi của lớp đó nhưng nó có quyền truy cập vào tất cả các thành viên riêng tư và được bảo vệ của lớp. Mặc dù các nguyên mẫu cho hàm bạn bè xuất hiện trong định nghĩa lớp, bạn bè không phải là hàm thành viên.
Một người bạn có thể là một hàm, mẫu hàm hoặc hàm thành viên, hoặc một lớp hoặc mẫu lớp, trong trường hợp đó, toàn bộ lớp và tất cả các thành viên của lớp đều là bạn.
Để khai báo một hàm là bạn của một lớp, hãy đặt trước nguyên mẫu hàm trong định nghĩa lớp bằng từ khóa friend như sau -
class Box { double width; public: double length; friend void printWidth( Box box ); void setWidth( double wid ); };
Để khai báo tất cả các hàm thành viên của lớp ClassTwo là bạn của lớp ClassOne, hãy đặt khai báo sau trong định nghĩa của lớp 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 ); }; // Member function definition void Box::setWidth( double wid ) { width = wid; } // Note: printWidth() is not a member function of any class. void printWidth( Box box ) { /* Because printWidth() is a friend of Box, it can directly access any member of this class */ cout << "Width of box : " << box.width <<endl; } // Main function for the program int main() { Box box; // set box width without member function box.setWidth(10.0); // Use friend function to print the wdith. printWidth( box ); return 0; }
Đầu ra
Điều này sẽ cung cấp đầu ra -
Width of box: 10
Mặc dù hàm không phải là thành viên của lớp, nhưng nó có thể truy cập trực tiếp vào các biến thành viên của lớp đó. Điều này có thể rất hữu ích trong một số trường hợp nhất định.