There are private and protected members in a class that is inaccessible from outside of the class, constituting one of the concepts of object-oriented programming i.e. data hiding. However, these rules can be broken by a friend function.
A function defined with a friend keyword is called a friend function. It can access both the private and protected members from outside the class.
Declaration of friend function:
class class_name
{
.......
friend data_type function_name(arguments);
.......
};
- A friend can be a member’s function, function template, or function, or a class or class template, in which case the entire class and all of its members are friends.
- Although the friend function appears inside the class, they are not membersfunction.
- They can be declared anywhere in the class.
Example: C++ program for a friend function
#include <iostream>
using namespace std;
class Number
{
private:
int num;
public:
Number(): num(0) { }
friend int add(Number); //friend function
};
int add(Number n)
{
n.num += 20;
return n.num;
}
int main()
{
Number num;
cout<<"Number: "<< add(num)<<endl;
return 0;
}
Output:
Number: 20
C++ friend class
friend keyword is also used to declare a friend class in C++. When a class is declared a friend class, all the member functions of the friend class become friend functions.
class Two;
class One {
// class Two is a friend class of class One
friend class Two;
... .. ...
}
class Two{
... .. ...
}
In the above example, class Two is a friend class of class One indicating that we can access all the members of class One from class Two. However, vice-versa is not granted.
Example: C++ program for a friend class.
#include <iostream>
using namespace std;
class One
{
int num = 10;
friend class Two; // friend class.
};
class Two
{
public:
void print(One &o)
{
cout<<"Num = "<<o.num;
}
};
int main()
{
One o;
Two t;
t.print(o);
return 0;
}
Output:
Num = 10