Sunteți pe pagina 1din 3

Lab 10B: Funcții și clase prietene

1) Clasă prietenă și funcție prietenă în C++


Știm că membrii privați ai unei clase nu pot fi accesați din afara clasei. Totuși există și alternativa de a apela
funcții friend care au acces la membrii privați ai clasei. Tot la fel o clasă friend poate accesa membrii privați
ai clasei care declară prietenia.
Vom vedea mai jos două exemple:
A) de creare a unei funcții globale prietene cu o clasa
B) de creare a unei clase prietene cu o alta clasa

A) Funcție globală prietenă cu o clasă

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 02: Class Point3d claiming Increment_point function as its friend.


friend void Increment_Point(Point3d& pt);

//Sample 03: class member function to print the private members


void Printdata()
{
cout<<"X: "<<m_x<<endl;
cout<<"Y: "<<m_y<<endl;
cout<<"Z: "<<m_z<<endl;
}
}; //end of class definition

//Sample 04: Friend Function that makes Increment of the 3d point.


1
void Increment_Point(Point3d& pt)
{
//Note that the private members of the class are changed by the global function
pt.m_x++;
pt.m_y++;
pt.m_z++;
}
int main()
{
//Sample 05: Create the Object and print the Initial Co-Ordinates
……..
…..
cout<<endl;

//Sample 06: Increment the object using the Friend Function and print
// the points.
……
……
_getch();
return 0;
}

La rulare vom avea:

Temă: Integrați funcția friend în clasă.

B) O clasă ce se declară prietenă cu o altă clasă

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
….

//Sample 05: Use increment_x method to increment x coordinate(crearea instantei pt clasa


CpointUtil..)
…………….

//Sample 06: Use increment_both to increment both x and y Co-Ordinates


…………………….
_getch();
return 0;
}

S-ar putea să vă placă și