C++ Friend function & Friend Class

If a function is defined as a friend function in C++, then the protected and private data of a class can be accessed using the function.

By using the keyword friend compiler knows the given function is a friend function.

For accessing the data, the declaration of a friend function should be done inside the body of a class starting with the keyword friend.

Declaration of friend function in C++

Class class_name

{

friend data_type function_name(argument/s); // syntax of friend function.

};

In the above declaration, the friend function is preceded by the keyword friend.

The function can be defined anywhere in the program like a normal C++ function.

The function definition does not use either the keyword friend or scope resolution operator.

Characteristics of a Friend function:

  • The function is not in the scope of the class to which it has been declared as a friend
  • It cannot be called using the object as it is not in the scope of that class
  • It can be invoked like a normal function without using the object
  • It cannot access the member names directly and has to use an object name and dot membership operator with the member name
  • It can be declared either in the private or the public part

C++ friend function Example

Let's see the simple example of C++ friend function used to print the length of a box.

            #include <iostream>

            using namespace std;

            class Box

            {

                        private:

                        int length;

            public:

            Box() : length(0) {}

            friend int printLength(Box); // friend function

            };

            int printLength(Box b)

            {

                        b.length + = 10;

                        return b.length;

            }

            int main()

            {

                        Box b;

                        cout  << “Length of box: “ << printLength(b) << endl;

                        return 0;

            }

Output:

Length of box : 10

C++ Friend class

A friend class can access both private and protected members of the class in which it has been declared as friend.

Let's see a simple example of a friend class.

            #include <iostream>

            using namespace std;

            class A

            {

                        int x =5;

                        friend class B; // friend class

            };

            class B

            {

                        public:

                        void display(A &a)

                        {

                                    cout << “value of x is : “ << a.x << endl;    

                        }

            };

            int main()

            {
                        A a;

                        B b;

                        b.display(a);

                        return 0;

            }

 

Output:

Value of x is : 5

In the above example, class B is declared as a friend inside the class A. Therefore, B is a friend of class A. Class B can access the private members of class A.