🔹 Friend Function in C++

 


A friend function allows a function to access the private and protected members of a class, even though it is not a member of that class.

🔹 Syntax

class ClassName {
private:
    int data;
public:
    ClassName(int val) : data(val) {}

    // Friend function declaration
    friend void friendFunction(ClassName obj);
};

1️⃣ Basic Friend Function Example

📌 A friend function accessing private members.

#include <iostream>
using namespace std;

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

    // Declaring a friend function
    friend void showData(Sample obj);
};

// Friend function definition
void showData(Sample obj) {
    cout << "Private data: " << obj.num << endl;
}

int main() {
    Sample obj(10);
    showData(obj);
    return 0;
}

🔹 Output

Private data: 10

2️⃣ Addition using Friend Function

📌 Using a friend function to add two private numbers.

#include <iostream>
using namespace std;

class Numbers {
private:
    int a, b;
public:
    Numbers(int x, int y) : a(x), b(y) {}

    // Friend function declaration
    friend int add(Numbers obj);
};

// Friend function definition
int add(Numbers obj) {
    return obj.a + obj.b;
}

int main() {
    Numbers obj(5, 7);
    cout << "Sum: " << add(obj);
    return 0;
}

🔹 Output

Sum: 12

3️⃣ Character Integer using Friend Function

📌 A friend function accessing both character and integer data members.

#include <iostream>
using namespace std;

class Data {
private:
    char ch;
    int num;
public:
    Data(char c, int n) : ch(c), num(n) {}

    // Friend function declaration
    friend void display(Data obj);
};

// Friend function definition
void display(Data obj) {
    cout << "Character: " << obj.ch << endl;
    cout << "Integer: " << obj.num << endl;
}

int main() {
    Data obj('A', 100);
    display(obj);
    return 0;
}

🔹 Output

Character: A
Integer: 100

4️⃣ Find Distance using Friend Function

📌 Using a friend function to find the distance between two points.

#include <iostream>
#include <cmath>
using namespace std;

class Point {
private:
    int x, y;
public:
    Point(int a, int b) : x(a), y(b) {}

    // Friend function declaration
    friend double distance(Point p1, Point p2);
};

// Friend function definition
double distance(Point p1, Point p2) {
    return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
}

int main() {
    Point p1(3, 4), p2(7, 1);
    cout << "Distance: " << distance(p1, p2);
    return 0;
}

🔹 Output

Distance: 5

5️⃣ Length of Box using Friend Function

📌 A friend function accessing private data of a Box class.

#include <iostream>
using namespace std;

class Box {
private:
    int length;
public:
    Box(int l) : length(l) {}

    // Friend function declaration
    friend void printLength(Box obj);
};

// Friend function definition
void printLength(Box obj) {
    cout << "Length of Box: " << obj.length << endl;
}

int main() {
    Box b(20);
    printLength(b);
    return 0;
}

🔹 Output

Length of Box: 20

6️⃣ Private & Protected Example in C++

📌 Accessing both private and protected data using a friend function.

#include <iostream>
using namespace std;

class Sample {
private:
    int privateNum;
protected:
    int protectedNum;
public:
    Sample(int p, int q) : privateNum(p), protectedNum(q) {}

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

// Friend function definition
void display(Sample obj) {
    cout << "Private Number: " << obj.privateNum << endl;
    cout << "Protected Number: " << obj.protectedNum << endl;
}

int main() {
    Sample obj(50, 100);
    display(obj);
    return 0;
}

🔹 Output

Private Number: 50
Protected Number: 100

📌 Summary

✔ A friend function can access private and protected members.
✔ Declared inside the class but defined outside.
✔ It is not a member of the class.
✔ It helps in operations involving multiple objects (like addition, distance calculation).

Let me know if you need more examples! 🚀🔥

Post a Comment

0 Comments