/************************************************************************ *
In the following example, the friend function
print is a member of class Y and accesses the private data
members a and b of class X .
* ************************************************************************/
// This example illustrates a friend function.
#include <iostream.h>
class X;
class Y
{
public:
void print(X& x);
};
class X
{
public:
X() {a=1; b=2;}
private:
int a, b;
friend void Y::print(X& x);
};
void Y::print(X& x)
{
cout << "A is "<< x.a << endl;
cout << "B is " << x.b << endl;
}
void main ()
{
X xobj;
Y yobj;
yobj.print(xobj);
}
/************************************************************************ *
In the following example, the friend class F has a member
function print that accesses the private data members a and b of
class X and performs the same task as the friend function print
in the above example. Any other members declared in class F also
have access to all members of class X. In the example, the friend
class F has not been previously declared, so an elaborated type
specifier and a qualified type specifier are used to specify the
class name.
* ************************************************************************/
// This example illustrates a friend class.
#include <iostream.h>
class X
{
public:
X() {a=1; b=2;} // constructor
private:
int a, b;
friend class F; // friend class
};
class F
{
public:
void print(X& x)
{
cout << "A is " << x.a << endl;
cout << "B is " << x.b << endl;
}
};
void main ()
{
X xobj;
F fobj;
fobj.print(xobj);
}
/************************************************************************ *
Both the above examples produce the following output:
A is 1 B is 2
* ************************************************************************/