किसी वर्ग के मित्र कार्य को उस वर्ग के दायरे से बाहर परिभाषित किया गया है लेकिन उसे कक्षा के सभी निजी और संरक्षित सदस्यों तक पहुंचने का अधिकार है। भले ही फ्रेंड फंक्शन के प्रोटोटाइप क्लास डेफिनिशन में दिखाई देते हैं, फ्रेंड्स मेंबर फंक्शन नहीं होते हैं।
एक दोस्त एक फंक्शन, फंक्शन टेम्प्लेट, या मेंबर फंक्शन, या एक क्लास या क्लास टेम्प्लेट हो सकता है, जिस स्थिति में पूरी क्लास और उसके सभी सदस्य दोस्त होते हैं।
किसी फंक्शन को क्लास के फ्रेंड के रूप में घोषित करने के लिए, क्लास डेफिनिशन में फंक्शन प्रोटोटाइप से पहले कीवर्ड फ्रेंड के साथ इस प्रकार -
class Box { double width; public: double length; friend void printWidth( Box box ); void setWidth( double wid ); };
कक्षा दो के सभी सदस्य कार्यों को कक्षा एक के मित्र के रूप में घोषित करने के लिए, निम्नलिखित घोषणा को कक्षा एक की परिभाषा में रखें -
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
भले ही फ़ंक्शन वर्ग का सदस्य नहीं था, यह सीधे उस वर्ग के सदस्य चरों तक पहुँच सकता था। यह कुछ स्थितियों में बहुत उपयोगी हो सकता है।