अंतिम अद्यतन:2026-10-12
C++ friend¶
लेखक के बारे में:¶
व्यक्तिगत WeChat सार्वजनिक अकाउंट:

0.अवलोकन¶
friend एक ऐसा तंत्र देता है जिससे कोई सामान्य फ़ंक्शन या क्लास मेंबर फ़ंक्शन किसी दूसरी क्लास के private या protected मेंबर को एक्सेस कर सके। यानी friend दो रूपों में होता है:
(1) friend फ़ंक्शन: सामान्य फ़ंक्शन किसी क्लास के private या protected मेंबर को एक्सेस करता है।
(2) friend क्लास: क्लास A का मेंबर फ़ंक्शन क्लास B के private या protected मेंबर को एक्सेस करता है
फ़ायदे: प्रोग्राम की रनटाइम दक्षता बढ़ाता है।
नुक़सान: क्लास के encapsulation और डेटा की पारदर्शिता को तोड़ता है।
सारांश: - private मेंबर एक्सेस कर सकता है - encapsulation तोड़ता है - friend संबंध transitive नहीं होता - friend संबंध एक-तरफ़ा होता है - friend declaration का रूप और संख्या असीमित हो सकती है
1.friend फ़ंक्शन¶
क्लास declaration के किसी भी हिस्से में declare किया जाता है, और परिभाषा क्लास के बाहर होती है।
ध्यान दें, friend फ़ंक्शन सिर्फ़ एक सामान्य फ़ंक्शन है, यह उस क्लास का मेंबर फ़ंक्शन नहीं है, इसे कहीं से भी कॉल किया जा सकता है, friend फ़ंक्शन में ऑब्जेक्ट के नाम से उस क्लास के private या protected मेंबर एक्सेस किए जाते हैं।
विस्तृत कोड के लिए देखें: friend_func.cpp
#include <iostream>
using namespace std;
class A
{
public:
A(int _a):a(_a){};
friend int geta(A &ca); ///< 友元函数
private:
int a;
};
int geta(A &ca)
{
return ca.a;
}
int main()
{
A a(3);
cout<<geta(a)<<endl;
return 0;
}
2.friend क्लास¶
friend क्लास की declaration उस क्लास की declaration में होती है, और implementation उस क्लास के बाहर।
क्लास B, क्लास A की friend है, तो क्लास B सीधे A के private मेंबर एक्सेस कर सकती है।
विस्तृत कोड के लिए देखें: friend_class.cpp
#include <iostream>
using namespace std;
class A
{
public:
A(int _a):a(_a){};
friend class B;
private:
int a;
};
class B
{
public:
int getb(A ca) {
return ca.a;
};
};
int main()
{
A a(3);
B b;
cout<<b.getb(a)<<endl;
return 0;
}
3.ध्यान दें¶
-
friend संबंध inherit नहीं होता मान लीजिए क्लास B क्लास A की friend है, क्लास C क्लास A से inherit है, तो friend क्लास B, क्लास C के private या protected मेंबर सीधे एक्सेस नहीं कर सकती।
-
friend संबंध transitive नहीं होता मान लीजिए क्लास B क्लास A की friend है, क्लास C क्लास B की friend है, तो friend क्लास C, क्लास A के private या protected मेंबर सीधे एक्सेस नहीं कर सकती, यानी "friend की friend" जैसा कोई संबंध नहीं होता।
संबंधित विषय¶
- C++ प्योर वर्चुअल फ़ंक्शन और एब्स्ट्रैक्ट क्लास | C++那些事
- C++ assert | C++那些事
- C++ bit-field | C++那些事
- C भाषा से C++ पॉलीमॉर्फ़िज़्म | C++那些事
- C++ const constant और qualifier | C++那些事
- C++ const परिवार | C++那些事
- C++ dereference ऑपरेटर * | C++那些事
- C++ इनिशियलाइज़ेशन और असाइनमेंट | C++那些事
- C++ multiple return values लिखने के तरीके | C++那些事
- C++ mutable कीवर्ड | C++那些事