C++ friend function in classes is an advanced topic. If you do not understand the fundamentals of Object orientated programming in C++, read Understanding basic object orientated programming and implementing a class step by step.  

The c++ friend function can simply access the private and protected members of the class when it is declared as a friend. When granting access to a class, you must specify that access is granted for a class using the friend keyword. The difference between using inheritance and the friend keyword in object orientated is the following:

  • Using friendship, if you have two classes named A and B, it allows access to the private/protected members’ data and functions of class C.
  • With inheritance, Class C touches the public and protected members of Class A and B.
  • Friendship is not inherited.
#include <iostream>
using namespace std;

class Cylinder;
class Cube;

enum colors {red, green, yellow};

class Cube
{
// Private member
colors color;
public:
Cube(colors c) { color = c; }
friend bool sameColor(Cube x, Cylinder y);
};

class Cylinder
{
colors color; // Private member
public:
Cylinder(colors c) {color = c; }
friend bool sameColor(Cube x, Cylinder y);
};

bool sameColor(Cube x, Cylinder y)
{

if(x.color == y.color) return true;
else return false;
}
void main()
{
Cube cube1(red);
Cube cube2(green);
Cylinder cyl(green);

if(sameColor(cube1, cyl))
cout << "cube1 and cyl are the same color\n";
else
cout << "cube1 and cyl are different color\n";
if(sameColor(cube2, cyl))
cout << "cube2 and cyl are the same color\n";
else
cout << "cube2 and cyl are different color\n";
}
Share this post