ฟังก์ชันเพื่อนของคลาสถูกกำหนดไว้นอกขอบเขตของคลาสนั้น แต่มีสิทธิ์เข้าถึงสมาชิกส่วนตัวและสมาชิกที่มีการป้องกันทั้งหมดของคลาส แม้ว่าต้นแบบของฟังก์ชันเพื่อนจะปรากฏในคำจำกัดความของชั้นเรียน แต่เพื่อนไม่ใช่ฟังก์ชันของสมาชิก
เพื่อนสามารถเป็นฟังก์ชัน เทมเพลตฟังก์ชัน หรือฟังก์ชันของสมาชิก หรือเทมเพลตของคลาสหรือคลาส ซึ่งในกรณีนี้ ทั้งชั้นเรียนและสมาชิกทั้งหมดเป็นเพื่อนกัน
หากต้องการประกาศฟังก์ชันในฐานะเพื่อนของคลาส ให้นำหน้าฟังก์ชันต้นแบบในนิยามคลาสโดยใช้คีย์เวิร์ด friend ดังนี้ -
class Box {
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
}; ในการประกาศฟังก์ชันสมาชิกทั้งหมดของคลาส ClassTwo เป็นเพื่อนของคลาส ClassOne ให้ระบุคำประกาศต่อไปนี้ในคำจำกัดความของคลาส ClassOne -
friend class ClassTwo;
ตัวอย่าง
#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;
} ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
Width of box: 10
แม้ว่าฟังก์ชันจะไม่ใช่สมาชิกของคลาส แต่ก็สามารถเข้าถึงตัวแปรสมาชิกของคลาสนั้นได้โดยตรง สิ่งนี้มีประโยชน์มากในบางสถานการณ์