Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คลาสเพื่อนและฟังก์ชันใน C++


ฟังก์ชันเพื่อนของคลาสถูกกำหนดไว้นอกขอบเขตของคลาสนั้น แต่มีสิทธิ์เข้าถึงสมาชิกส่วนตัวและสมาชิกที่มีการป้องกันทั้งหมดของคลาส แม้ว่าต้นแบบของฟังก์ชันเพื่อนจะปรากฏในคำจำกัดความของชั้นเรียน แต่เพื่อนไม่ใช่ฟังก์ชันของสมาชิก

เพื่อนสามารถเป็นฟังก์ชัน เทมเพลตฟังก์ชัน หรือฟังก์ชันของสมาชิก หรือเทมเพลตของคลาสหรือคลาส ซึ่งในกรณีนี้ ทั้งชั้นเรียนและสมาชิกทั้งหมดเป็นเพื่อนกัน

หากต้องการประกาศฟังก์ชันในฐานะเพื่อนของคลาส ให้นำหน้าฟังก์ชันต้นแบบในนิยามคลาสโดยใช้คีย์เวิร์ด 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

แม้ว่าฟังก์ชันจะไม่ใช่สมาชิกของคลาส แต่ก็สามารถเข้าถึงตัวแปรสมาชิกของคลาสนั้นได้โดยตรง สิ่งนี้มีประโยชน์มากในบางสถานการณ์