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