8. Друзья классов.

Дружественной функцией класса называется функция,  которая, не являясь его компонентой,  имеет доступ к его защищенным и собственным компонентам.  Она расширяет интерфейс класса. Для получения прав друга  функция должна быть описана в теле класса со спецификатором  friend.

.h

using namespace std;

 

class Datee

{

                int d, m, y;

public:

                Datee(int d, int m, int y)

                {

                               this->d = d;

                               this->m = m;

                               this->y = y;

                }

                Datee(int dd, int mm) : d(dd), m(mm), y(2006) {};

                Datee(int);

 

                void display()

                {

                               cout << "Date is " << d << " " << m << " " << y << "\n";

                }

 

                friend void Weeke(Datee);

};

 

Datee::Datee(int dd)

{

                d = dd;

                m = 3;

                y = 2006;

}

 

void Weeke(Datee d)

{

                cout << "This is from fried: " << d.d << " " << d.m << " " << d.y << "\n";

 

                d.d = d.d * 3;

                d.m = d.m * 3;

                d.y = d.y * 3;

 

                cout << "This is from fried modifications: " << d.d << " " << d.m << " " << d.y << "\n";

}

 

.cpp

#include "c_console.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

                Datee d(1, 3, 2006);

                d.display();

                Weeke(d);

                _getch();

                return 0;

}

Дружественные функции при вызове не получают указателя this. Объекты классов должны передаваться другим функциям явно через аппарат параметров. Вызывать дружественные функции как компонентные нельзя, так как они не являются компонентами классов.

Hosted by uCoz