Friend class and function in C++ - GeeksforGeeks

15 Mar, 2021
Friend Class A friend class can access private and protected members of other class in which it is declared as friend. It is sometimes useful to allow a particular class to access private members of other class. For example, a LinkedList class may be allowed to access private members of Node.  
CPP
class Node {private:    int key;    Node* next;    /* Other members of Node Class */     // Now class  LinkedList can    // access private members of Node    friend class LinkedList;};
Friend Function Like friend class, a friend function can be given a special grant to access private and protected members. A friend function can be: a) A member of another class b) A global function  
CPP
class Node {private:    int key;    Node* next;     /* Other members of Node Class */    friend int LinkedList::search();    // Only search() of linkedList    // can access internal members};
Following are some important points about friend functions and classes: 1) Friends should be used only for limited purpose. too many functions or external classes are declared as friends of a class with protected or private data, it lessens the value of encapsulation of separate classes in object-oriented programming.2) Friendship is not mutual. If class A is a friend of B, then B doesn’t become a friend of A automatically.3) Friendship is not inherited (See this for more details)4) The concept of friends is not there in Java. A simple and complete C++ program to demonstrate friend Class  
CPP
#include <iostream>class A {private:    int a; public:    A() { a = 0; }    friend class B; // Friend Class}; class B {private:    int b; public:    void showA(A& x)    {        // Since B is friend of A, it can access        // private members of A        std::cout << "A::a=" << x.a;    }}; int main(){    A a;    B b;    b.showA(a);    return 0;}
Output: 
A::a=0
A simple and complete C++ program to demonstrate friend function of another class  
CPP
#include <iostream> class B; class A {public:    void showB(B&);}; class B {private:    int b; public:    B() { b = 0; }    friend void A::showB(B& x); // Friend function}; void A::showB(B& x){    // Since showB() is friend of B, it can    // access private members of B    std::cout << "B::b = " << x.b;} int main(){    A a;    B x;    a.showB(x);    return 0;}
Output: 
B::b = 0
A simple and complete C++ program to demonstrate global friend  
CPP
#include <iostream> class A {    int a; public:    A() { a = 0; }     // global friend function    friend void showA(A&);}; void showA(A& x){    // Since showA() is a friend, it can access    // private members of A    std::cout << "A::a=" << x.a;} int main(){    A a;    showA(a);    return 0;}
Output: 
A::a = 0
References: http://en.wikipedia.org/wiki/Friend_class http://en.wikipedia.org/wiki/Friend_function http://www.cprogramming.com/tutorial/friends.html http://www.parashift.com/c++-faq/friends-and-encap.htmlPlease write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
ajith211
jeevanyasa
cpp-friend
C++
School Programming
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Socket Programming in C/C++
Operator Overloading in C++
Multidimensional Arrays in C / C++
vector erase() and clear() in C++
rand() and srand() in C/C++
Python Dictionary
Reverse a string in Java
Interfaces in Java
Operator Overloading in C++
C++ Data Types