विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++ friend

लेखक के बारे में:

व्यक्तिगत WeChat सार्वजनिक अकाउंट:

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 फ़ंक्शन सिर्फ़ एक सामान्य फ़ंक्शन है, यह उस क्लास का मेंबर फ़ंक्शन नहीं है, इसे कहीं से भी कॉल किया जा सकता है, 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 उस क्लास के बाहर।

friend class <友元类名>;

क्लास 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" जैसा कोई संबंध नहीं होता।

संबंधित विषय

टिप्पणियाँ