Friend Class in C++

 


1️⃣ What is a Friend Class?

A friend class in C++ is a class that can access private and protected members of another class.
This is useful when two classes need to share private data without using inheritance.

🔹 Key Features of Friend Class

Declared using friend keyword inside another class.
Can access private & protected members of the class.
Breaks encapsulation, so use only when needed.


2️⃣ Syntax of Friend Class

class ClassB;  // Forward declaration

class ClassA {
    private:
        int data;

    public:
        friend class ClassB;  // Declaring ClassB as a Friend
};

3️⃣ Example: Friend Class Accessing Private Data

#include <iostream>
using namespace std;

class Box {
private:
    int length;  // Private member

public:
    Box(int l) { length = l; }

    // Declare Friend Class
    friend class BoxInspector;
};

class BoxInspector {
public:
    void showLength(Box obj) {
        cout << "Box Length: " << obj.length << endl;  // Accessing private data
    }
};

int main() {
    Box b(10);
    BoxInspector inspector;
    inspector.showLength(b);  // Access private member through friend class

    return 0;
}

🔹 Output

Box Length: 10

Why use a Friend Class?
✔ Allows controlled access to private data.
✔ Helps two classes work together without inheritance.


4️⃣ Example: Friend Class with Multiple Private Members

#include <iostream>
using namespace std;

class BankAccount {
private:
    string owner;
    double balance;

public:
    BankAccount(string o, double b) {
        owner = o;
        balance = b;
    }

    // Declare Friend Class
    friend class BankManager;
};

class BankManager {
public:
    void showAccountDetails(BankAccount acc) {
        cout << "Owner: " << acc.owner << endl;
        cout << "Balance: $" << acc.balance << endl;
    }
};

int main() {
    BankAccount account("Alice", 5000.75);
    BankManager manager;
    manager.showAccountDetails(account);  // Friend class accessing private members

    return 0;
}

🔹 Output

Owner: Alice
Balance: $5000.75

Why use a Friend Class in Banking?
✔ The BankManager class can access private details without exposing them publicly.


5️⃣ Friend Class for Interacting with Two Classes

#include <iostream>
using namespace std;

class ClassB;  // Forward Declaration

class ClassA {
private:
    int numA;

public:
    ClassA(int a) { numA = a; }

    friend class ClassC;  // Declaring ClassC as a Friend
};

class ClassB {
private:
    int numB;

public:
    ClassB(int b) { numB = b; }

    friend class ClassC;  // Declaring ClassC as a Friend
};

class ClassC {  // Friend Class
public:
    void showData(ClassA objA, ClassB objB) {
        cout << "ClassA Num: " << objA.numA << endl;
        cout << "ClassB Num: " << objB.numB << endl;
    }
};

int main() {
    ClassA objA(10);
    ClassB objB(20);
    ClassC objC;

    objC.showData(objA, objB);  // Friend class accessing private members

    return 0;
}

🔹 Output

ClassA Num: 10
ClassB Num: 20

Why use a Friend Class for Multiple Classes?
Efficient data sharing between two unrelated classes.
Avoids unnecessary inheritance.


6️⃣ Key Takeaways

Friend classes can access private & protected members of another class.
Useful for data-sharing between two classes without inheritance.
Should be used carefully as it breaks encapsulation.

Would you like an example with friend function inside a friend class? 🚀

Post a Comment

0 Comments