Documente Academic
Documente Profesional
Documente Cultură
O funcție globală ce nu aparține niciunei clase poate fi prietenă cu una sau mai multe clase. Această
funcție globală nu va avea niciun fel de restricții în a apela datele membru private ale clasei. Urmăriți exemplul
de mai jos:
#include <iostream>
#include <conio.h>
using namespace std;
//=====================================================================
//Example 01: A Global Function having friendship with Point3d class
//=====================================================================
//Sample 01: A class to denote 3d points
class Point3d
{
private:
int m_x;
int m_y;
int m_z;
public:
Point3d(int x, int y, int z) //constructorul
{
m_x = x;
m_y = y;
m_z = z;
}
//Sample 06: Increment the object using the Friend Function and print
// the points.
……
……
_getch();
return 0;
}
O clasă poate declara prietenia cu o altă clasă. Dacă de exemplu o clasă A declară prietenia cu o clasă
B, atunci toate funcțiile membre ale clasei B pot accesa membrii de date privați ai clasei A. Să privim la un
exemplu:
#include <iostream>
#include <conio.h>
using namespace std;
//====================================================================================
//Example 02: Friend Class
//====================================================================================
//Sample 01: A 2d point class defined. It claims friendship with the CPointUtil Class
class CPoint2d
{
private:
int m_x;
int m_y;
public:
CPoint2d(int x, int y)
{
m_x = x;
m_y = y;
}
2
void print()
{
cout<<"X: "<< m_x << " Y: " << m_y << endl;
}
//Sample 02: Now all the member functions of CPointUtil can access the private data of this
class.
friend class CPointUtil;
};
//Sample 03: CPointUtil changing the private data member of the supplied CPoint2d class.
class CPointUtil
{
public:
void increment_x(CPoint2d& pt)
{
pt.m_x++;
}
void increment_y(CPoint2d& pt)
{
pt.m_y++;
}
void increment_both(CPoint2d& pt)
{
pt.m_x++;
pt.m_y++;
}
};
int main()
{
//Sample 04: Create a CPoint2d instance and print the co-ordinates
….