13.01.2015 Views

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!