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, the 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 the 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 the 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 a 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.