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? 🚀
0 Comments