C++ में friend functions क्या है? उसे कैसे Declare और Define करते है। और उसके फायदे और नुकसान 

What is friend function in C++ in hindi

C++, में एक Class के भीतर Declare किए गए Private और Protected members को उस Class के बाहर Access नहीं किये जा सकते।

लेकिन यह नियम friends function को प्रभावित नहीं करता। अतः friend function एक विशेष प्रकार का फंक्शन होता है जो Class का member नही होता परंतु उसके पास Class के Private और Protected members को Access करने की योग्यता होती है।

 

अगर आप एक फंक्शन को एक Class का friend declare करना चाहते हैं तो इसका अर्थ है कि आप उसे function को इस Class के Private और Protected members को Access करने की अनुमति दे रहे हैं।

friend functions के बारे में मुख्य बिंदु 

1) Friend functions जिस Class में declare किए गए हैं उसके Class के Private और Protected members को Access कर सकते है।

2) ये Class के अंदर friend keyword का Use करके declare किए जाते है और Class के बाहर बिना friend keyword का Use किए Define किए जाते है।

3) friend functions, Class के member functions नहीं होते तब भी ये Class के Private data को Access करते हैं।


4) इसका Use सामान्यत operator overloading के लिए होता है जहां पर Objects के Private data को Access करने की जरुरत होती है।

Declaration of friend function in C++ in Hindi 

एक friend function को Class definition के अंदर friend keyword का Use करके declare किया जाता है,
जो function को Class के Private और Protected members को Access करने की अनुमति देता है।
 
एक function एक friend की तरह कितनी भी Classes में declare हो सकता है 

Syntax:

class ClassName {
private:
    // Private members
protected:
    // Private members
public:
    // Public members
//Declaration of a friend function 
    friend data-type function -name (Parameters);
};

Define friend function in C++ in Hindi 

friend function, को प्रोग्राम में एक सामान्य function की तरह कहीं भी Define कर सकते हैं।

function definition में न तो 'friend' keyword का उपयोग होता है और न Scope resolution operator(::)का उपयोग होता है।

Syntax:

ReturnType functionName(Arguments) {
    // Function body
}

Program for friend function in Single Class  
#include<iostream> 
using namespace std;
class ABC {
private:
    int x, y, z;
    friend int Myfriend(ABC obj); // Friend function declaration
};
int Myfriend(ABC obj) { // Friend function definition
    obj.x = 10;
    obj.y = 20;
    obj.z = obj.x + obj.y;
    return obj.z;
}
int main() {
    ABC obj1;
    cout << "Result: " << Myfriend(obj1) << endl;
    return 0;
}
Output:
Result: 30

Explanation:

1) Friend Function को Declare करना: 
friend int Myfriend(ABC obj);

Myfriend को Class ABC के एक friend function की तरह Declare किया गया है।

2) Friend Function को Define करना: 
int Myfriend(ABC obj) 

यह Define करता है कि ABC के Private members को Access करने और उन्हें Modify करने के लिए Friend Function क्या करता है।

3) Main Function: 
यहां पर ABC class का एक Object obj1 का निर्माण किया जाता है और Result को Print करने के लिए Myfriend friend को Call किया जाता है।

Program for friend function in two  Class
#include<iostream>
using namespace std;
class DEMO2; // Forward declaration of DEMO2
class DEMO1 {
private:
    int x, y, z;
    friend int Myfriend(DEMO1, DEMO2); // Friend function declaration
};
class DEMO2 {
private:
    int a, b, c;
    friend int Myfriend(DEMO1, DEMO2); // Friend function declaration
};
int Myfriend(DEMO1 obj1, DEMO2 obj2) { // Friend function definition
    obj1.x = 10;
    obj1.y = 20;
    obj1.z = obj1.x + obj1.y;
    obj2.a = 13;
    obj2.b = 15;
    obj2.c = obj2.a + obj2.b;
    int result = obj1.z + obj2.c;
    return result;
}
int main() {
    DEMO1 obj1;
    DEMO2 obj2;
    cout << "Result: " << Myfriend(obj1, obj2) << endl;
    return 0;
}
Output:
Result: 58

Explanation:

1) Forward Declaration:
   class DEMO2;
यह Declaration आवश्यक है क्योंकि Friend Function को Declare करते समय DEMO1 को DEMO2 के अस्तित्व के बारे में जानना आवश्यक है।

2) Class DEMO1:
   class DEMO1 {
   private:
       int x, y, z;
       friend int Myfriend(DEMO1, DEMO2);
   };

 DEMO1 Class तीन Private members `x`, `y`, और `z` को रखा है तथा `Myfriend` को एक friend function की तरह Declare किया गया है 

3) Class DEMO2:
   class DEMO2 {
   private:
       int a, b, c;
       friend int Myfriend(DEMO1, DEMO2);
   };
DEMO2 Class तीन Private members`a`, `b`, और `c`को रखा है तथा `Myfriend` को एक friend function की तरह Declare किया गया है 

4) Friend Function:
   int Myfriend(DEMO1 obj1, DEMO2 obj2) {
       obj1.x = 10;
       obj1.y = 20;
       obj1.z = obj1.x + obj1.y;
       obj2.a = 13;
       obj2.b = 15;
       obj2.c = obj2.a + obj2.b;
       return obj1.z + obj2.c;
   }

Parameters:
ऊपर Friend Function के लिए Parameters के रूप में दो Objects एक DEMO1(obj1)का तथा दूसरा DEMO2(obj2 ) का लिया गया है 

Private Members को Access करना:
obj1.x और obj1.y के लिए Values Set किया गया है और दोनो का Total, obj1.z मे किया गया है।

obj1.a और obj1.b के लिए Values Set किया गया है और दोनो का Total, obj1.c मे किया गया है।

Combines Results: 
result पाने के लिए obj1.z और obj2.c को Add किया गया है।

5) Main Function:
   int main() {
       DEMO1 obj1;
       DEMO2 obj2;
       cout << "Result: " << Myfriend(obj1, obj2) << endl;
       return 0;
   }

DEMO1 और DEMO2 के लिए 
 `obj1` और`obj2`, का निर्माण किया गया है ताकि `Myfriend`, को Call करके उसके result को print किया जा सके।

Features of friend function in C++ in Hindi

friend function की निम्न विशेषताएं हैं 

1) Private Members को Access करना:
Friend functions एक Class के Private और Protected members को सीधे Access कर सकते हैं।

2)`friend` Keyword के साथ declare करना:
 ये Class के अंदर `friend` keyword का Use करके declare किए जाते है।

3) एक Member Function नहीं है:
यद्यपि ये Private members को Access करते है तब भी ये Class के, Member functions नहीं है।

4) Class के बाहर Define होना:
 Regular functions की तरह ही इसे Class के बाहर Define किया जाता है।

5) कई Friend Functions:
एक Class के एक से ज्यादा friend function हो सकते है।

6) Friendship को Inherit नही किया जा सकता:
Friendship को Derived classes के द्वारा Inherit नही किए जा सकते इसे स्पष्ट रूप से प्रत्येक Class में Declare होना होता है।

7) Operator Overloading के लिए उपयोगी:
Friend functions को अक्सर Overload operators के लिए Use किया जाता है जिसे कई Objects के Private data को Acess करने की जरुरत होती है।

8) Global Scope:
Friend functions को अक्सर global scope में Define किया जाता है न कि Class के अंदर।

9) कई Classess के Friend हो सकते:
एक Friend function कई Classes के friend हो सकते है, जो इन्हे कई Classes के Private members को Access करने की अनुमति देते हैं।

10) Code Modularity में सुधर:
Private data, तक Controlled Access की अनुमति देकर, Friend function, Encapsulation को संरक्षित करते हुए संबंधित कोड को एक साथ रखने में मदद करते हैं।
   

Advantages/Uses of friend function in C++ in Hindi

Friend function के निम्न उपयोग या फायदे है

1) Friend functions एक Class तक पहुंच कर उसके Private और Protected data को Use कर सकते है जिसे सामान्य functions छू भी नहीं सकता।

2) ये Private data members को सीधे Access की अनुमति देने के द्वारा operators (जैसे +, -, *) को Overload करना आसान बनाते हैं।

3) ये विभिन्न Objects के बीच Private data की तुलना करने की अनुमति देते हैं जो functions के comparison के लिए उपयोगी है।

4) एक friend function कई Classes के friends हो सकते है जो उसे उन सभी Classes के Private data को Access करने की अनुमति देते हैं।

5) ये Non-member functions होते हैं जो Class के Private data को Access करते हैं, जो Class को बदले बिना इसकी functionality को extend करता है।

6) कुछ functions को Private Data को Access की अनुमति देते हुए, वे Encapsulation को बनाए रखते हुए Data को बाहरी दुनिया से छिपाए रखते हैं। 

7) वे बेहतर नियंत्रण प्रदान करते हैं कि कौन से function Private data को Access कर सकते हैं, जिससे Data की Security और Integrity बढ़ जाती है।

8) friend functions कुछ कार्यों को Class के बाहर के function में ले जाकर Class को सरल और समझने में आसान रखने में मदद करते हैं।

Disadvantages of friend functions in C++ in Hindi

friend functions के कुछ नुकसान भी है जो निम्न है।

1) Friend function, private और protected members, को Access करता है जो Encapsulation के pricipal को तोड़ता है।

2) friend functions का Use Code को समझने और Maintain करने में कठिन बना देता है

क्योंकि इसमें तुरंत यह पता नहीं चलता कि कौन सा functions Private data को Access कर रहा है।

3) Classes को Inherit करते समय Friend functions समस्याएँ पैदा कर सकते हैं।

4) बाहरी functions को Private data को Access करने से Security risk हो सकता है 

5) इसमें Debugging ज्यादा कठिन बन सकता है क्योंकि friend functions, Private data को अप्रत्याशित तरीकों से संशोधित कर सकते हैं, जिससे Bugs ढूंढना कठिन हो जाता है। 

6) Friend functions का अत्यधिक उपयोग Code को भ्रमित करने वाला और Manage करने में कठिन बना सकता है।


7) Friend functions, Classes के बीच एक मजबूत Connection बनाता है जिससे अन्य Class को प्रभावित किए बिना एक Class में बदलाव करना कठिन हो जाता है।

8) Friend functions, विशेष Classes, से जुड़ा रहता है जिससे यह Code को reuse करना कठिन बना देता है 

 Related Posts

> C++ क्या है? उसके इतिहास, गुण, उपयोग, फायदे और नुकसान 

> Basic structure of C++ Program 

> C++ में Tokens क्या है? और उसके प्रकार

> C++ Variables क्या है?, उसके प्रकार, उसे कैसे Declare, Define करते हैं

> C++ में Constants क्या है? उसके प्रकारों की संपूर्ण जानकारी

> C++ में Basic Input और Output (cin,cout,cerr) की जानकारी

> Data type in C++ की संपूर्ण जानकारी 

> C+ में Operators और उसके प्रकार जानें Practical सहित 

> C++ में Conditional और उसके प्रकारों को जानें Practical सहित 

> C++ में Looping statements और उसके प्रकार Practical सहित 

> C++ में Jump Statements और उसके प्रकारों की संपूर्ण जानकारी Practical सहित

> C++ में Array क्या है? और उसके प्रकारों की जानकारी Practical सहित

> C++ में Function क्या है उसके प्रकार, उपयोग प्रोग्राम सहित 

> C++ में Structure क्या है Practical सहित

> OOPs Concepts in C++ in Hindi- C++ में OOPs के बारे में

> Oops के फायदे और नुकसान की जानकारी 

> OOP और POP के बीच अंतर 

> C++ में Class और Object की सम्पूर्ण जनकारी

> C++ में Array of Objects क्या है? 

> C++ में Pointers, Pointer to an objects, Pointer to an Array की संपूर्ण जानकारी हिंदी में।

C++ में Passing objects क्या है

> C++ में Reference और Type Casting की संपूर्ण जानकारी

> C++ में Access specifier की संपूर्ण जानकारी 

> C++ में Static Data Members और Member Functions के बारे में Practical सहित 

> C++ में Memory allocation और Memory management operators (new और delete) Practical सहित 

> Friend Class in C++ in Hindi Practical सहित 

> Inline function in C++ in Hindi 

> Function Overloading in C++ in Hindi Practical सहित 

> Operator Overloading in C++ in Hindi Practical सहित 

> C++ में Constructor क्या है और उसके प्रकारों की संपूर्ण जानकारी

> C++ में Destructor क्या है ?उसकी संपूर्ण जानकारी

> C++ मे Inheritance क्या है उसके प्रकारों को जानें प्रोग्राम सहित

> C++ में Polymorphism क्या है? और उसके प्रकारों को जानें

> C++ में Virtual function की संपूर्ण जानकारी

> C++ में File handling की संपूर्ण जानकारी 

> C++ में Exception handling  की संपूर्ण जानकारी