Объектно-ориентированное программирование на С++ - eDrive
Объектно-ориентированное программирование на С++ - eDrive
Объектно-ориентированное программирование на С++ - eDrive
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
104<br />
friend void Show (VFriendPC x);<br />
};<br />
void Show (VFriendPC x) { ShowMessage (AnsiString ( x.num )); }<br />
void MainVFriendPC () { VFriendPC price (900); Show (price); }<br />
В приведенном примере Show объявле<strong>на</strong> функцией, дружественной<br />
классу VFriendPC, поэтому о<strong>на</strong> свободно обрабатывает закрытую переменную<br />
num этого класса.<br />
Особенно полезными аспектами механизма дружественных функций<br />
является то, что функция может быть дружественной по отношению к нескольким<br />
классам, член-функция одного класса может быть дружественной<br />
другому классу и, <strong>на</strong>против, сразу группа функций или целый класс могут<br />
быть дружественными рассматриваемому классу:<br />
class VTwo;<br />
class VOne {<br />
friend void Out (VOne &c1, VTwo &c2);<br />
private:<br />
char *s1;<br />
public:<br />
VOne () { s1 = "Проверка: ";}<br />
};<br />
class VTwo {<br />
friend void Out (VOne &c1, VTwo &c2);<br />
private:<br />
char *s2;<br />
public:<br />
VTwo () { s2 = "Sony, Siemens, Fuji"; }<br />
};<br />
void Out (VOne &c1, VTwo &c2) {<br />
ShowMessage (AnsiString ( c1.s1) + AnsiString (c2.s2));<br />
}<br />
void MainVOneVTwo () {<br />
VOne c1; VTwo c2; Out (c1, c2); // Проверка: Sony, Siemens, Fuji<br />
}<br />
Если все функции одного класса дружественны второму классу, то говорят<br />
о дружественном классе (friend class):<br />
class VFirst;<br />
class VSecond {<br />
AnsiString model, firm;