किसी क्लास का फ्रेंड फ़ंक्शन उस क्लास के स्कोप के बाहर परिभाषित होता है लेकिन उसे उस क्लास के सभी प्राइवेट और प्रोटेक्टेड मेंबर्स को एक्सेस करने का अधिकार होता है। भले ही फ्रेंड फ़ंक्शन के प्रोटोटाइप क्लास परिभाषा में दिखाई देते हैं, फ्रेंड मेंबर फ़ंक्शन नहीं होते।
एक फ्रेंड एक फ़ंक्शन, फ़ंक्शन टेम्पलेट, या मेंबर फ़ंक्शन, या एक क्लास या क्लास टेम्पलेट हो सकता है, जिस स्थिति में पूरी क्लास और उसके सभी मेंबर्स फ्रेंड होते हैं।
किसी फ़ंक्शन को क्लास का फ्रेंड घोषित करने के लिए, क्लास परिभाषा में फ़ंक्शन प्रोटोटाइप से पहले कीवर्ड 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);
};
// मेंबर फ़ंक्शन परिभाषा
void Box::setWidth(double wid) {
width = wid;
}
// नोट: printWidth() किसी भी क्लास का मेंबर फ़ंक्शन नहीं है।
void printWidth(Box box) {
/* क्योंकि printWidth() Box का फ्रेंड है, यह
सीधे इस क्लास के किसी भी मेंबर को एक्सेस कर सकता है */
cout << "Width of box: " << box.width << endl;
}
// प्रोग्राम के लिए मुख्य फ़ंक्शन
int main() {
Box box;
// मेंबर फ़ंक्शन के बिना बॉक्स की चौड़ाई सेट करें
box.setWidth(10.0);
// चौड़ाई प्रिंट करने के लिए फ्रेंड फ़ंक्शन का उपयोग करें
printWidth(box);
return 0;
}
आउटपुट
इससे निम्न आउटपुट मिलेगा:
Width of box: 10
भले ही फ़ंक्शन क्लास का मेंबर नहीं था, यह सीधे उस क्लास के मेंबर वेरिएबल्स को एक्सेस कर सकता था। यह कुछ स्थितियों में बहुत उपयोगी हो सकता है।