Friend Function क्या है? आवश्यकता, लाभ एवं हानियाँ

Friend Functions

Friend Function एक ऐसा function होता है, जो किसी भी class का member function नहीं होता, फिर भी उसे उस class के private और protected data को access करने की special power दी जाती है। इसे define करने के लिए हम class के अंदर friend keyword का उपयोग करते हैं।

Note :  ये function class के बाहर define होता है। यह एक non-member function ही रहता है, बस उसे दोस्ती का सर्टिफिकेट मिल जाता है।

Syntax :

class ClassName {
private:
int data;
public:
friend void functionName(ClassName obj);    // friend function declaration
};

C++ Programm

class MyData {
private:
int value;   // private member
public:
MyData() {
value = 10;
}
// Declaration of friendship with the “friend” keyword
friend void showValue(MyData obj);
};

// Friend function का definition
void showValue(MyData obj) {
// यहाँ हम private member ‘value’ को access कर पा रहे हैं
cout << “Value from my secret data: ” << obj.value << endl;
}

int main() {
MyData myObj;
showValue(myObj); // function call
return 0;
}

Explain : code में showValue function MyData class का member नहीं है। इसके पास MyData का कोई object भी नहीं है, फिर भी ये myObj.value को access कर पा रहा है। ये सब friend keyword की वजह से possible हो पाया है।

Friend Function की आवश्यकता क्यों? (Why is Friend Function needed?)

  1. To access private members (Private Members को Access करने के लिए) :

    • बिना class के members को public बनाए, friend function उन्हें access कर सकता है।

  2. Data Sharing Between Two Classes or Objects (Two Classes या Objects के बीच Data Sharing) :

    • अगर दो अलग-अलग classes के objects के बीच private data share करना है, तो friend function इसका आसान तरीका है।

  3. Useful in Operator Overloading (Operator Overloading में उपयोगी) : 

    • जैसे {+, <<, >>} operators को overload करने के लिए अक्सर friend function का use किया जाता है, ताकि दोनों objects के private data तक access मिल सके।

प्रकार (Types)

1. A simple friend function :

  • यह class का member नहीं होता।
  • इसे class के अंदर friend keyword से declare किया जाता है।
  • Class के private और protected members को access कर सकता है।

Syntax :

class A {
private:
int x;
public:
friend void display(A &obj); // Friend function declaration
};

void display(A &obj) { // Friend function definition
cout << obj.x;
}

उदाहरण :

#include <iostream>
using namespace std;

class Sample {
private:
int num;
public:
Sample(int n) : num(n) {}

// Friend function declaration
friend void display(Sample &s);
};

// Friend function definition
void display(Sample &s) {
cout << “Number: ” << s.num << endl;
}

int main() {
Sample obj(5);
display(obj); // Friend function call
return 0;
}

2. Friend Function of Another Class :

  • एक function को दो या दो से अधिक classes का friend बनाया जा सकता है।
  • इसका फायदा: function दोनों classes के private data तक access कर सकता है।

Syntax :

class B;   // forward declaration

class A {
private:
int data;
public:
friend void B::show(A &obj); // B class का function A का friend
};

class B {
public:
void show(A &obj) {
cout << obj.data;
}
};

उदाहरण :

class B; // Forward declaration

class A {
private:
int x = 5;
public:
friend void show(A &a, B &b);
};

class B {
private:
int y = 15;
public:
friend void show(A &a, B &b);
};

void show(A &a, B &b) {
cout << “A.x = ” << a.x << “, B.y = ” << b.y << endl;
}

लाभ (Advantages)

Complex Scenarios : Operator overloading, विशेष रूप से stream insertion (<<) और extraction (>>) operators में friend functions का उपयोग करना बहुत logical होता है।

Flexibility : ये आपको class design में flexibility देता है। आप functions को class के बाहर भी रख सकते हैं, और फिर भी उन्हें जरूरी access दे सकते हैं।

Code readability :  कुछ स्थितियों में, एक non-member function को friend बनाने से code को पढ़ना और समझना आसान हो जाता है।

हानि (Disadvantages)

Encapsulation : ये सबसे बड़ा drawback है। Friend function सीधे तौर पर Data Hiding के concept को bypass करता है। यह आपकी class की सुरक्षा को खतरे में डाल सकता है।

Debugging difficult : अगर किसी class के बहुत सारे friends हैं, तो ये पता लगाना मुश्किल हो जाता है कि कौन सा function private data को कहाँ और कैसे बदल रहा है। इसे debugging के लिए एक दुःस्वप्न( nightmare) की तरह भी देखा जाता है।

No help in inheritance : Friend function inheritance में स्वतः inherit नहीं होता। अगर parent class का कोई friend है, तो वो child class का friend नहीं होगा।

error: Content is protected !!