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. Объекты классов должны передаваться другим функциям явно через аппарат параметров. Вызывать дружественные функции как компонентные нельзя, так как они не являются компонентами классов.