You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
эта функция — друг класса Student<br />
//и имеет доступ к его защищенным членам<br />
void initialize(Student *pS)<br />
f<br />
pS->cpa=Q;<br />
//теперь эти строки законны<br />
pS->=emesterHours = 0;<br />
}<br />
Одна и та же функция может одновременно быть объявлена другом нескольких<br />
классов. Это может быть удобно, например, для связи двух классов. Правда, такого<br />
рода связь не очень приветствуется, поскольку делает оба класса зависимыми друг от<br />
друга. Однако, если два класса взаимосвязаны по своей природе, их объединение может<br />
оказаться не столь плохим решением.<br />
class Student;<br />
class Teacher<br />
i<br />
friend void registration();<br />
protected:<br />
int noStudents;<br />
Student *pList[100];<br />
public:<br />
void assignGrades();<br />
};<br />
class Stjdent<br />
{<br />
friend void rp^i.t:". .' ' •<br />
public:<br />
//те же открытые члены, что и раньше<br />
protected:<br />
Teacher *рТ;<br />
int semesterHours; //количество часов в семестре<br />
float gpa;<br />
};<br />
В данном примере функция registration О может обращаться к обоим классам<br />
— и student и Teacher, связывая их на этапе регистрации, но при этом не входя<br />
в состав этих классов.<br />
Обратите внимание, что в первой строке примера объявляется класс student, но<br />
не объявляются его члены. Запомните: такое описание класса называется предварительным<br />
и в нем описывается только имя класса. Предварительное описание нужно<br />
для того, чтобы другие классы, такие, например, как Teacher, могли обращаться<br />
к классу student. Предварительные описания используются тогда, когда два класса<br />
должны обращаться один к другому. Функция-член одного класса может быть объявлена<br />
как друг некоторого другого класса следующим образом:<br />
class Teacher<br />
{<br />
//те же члены, что и раньше<br />
public:<br />
void assignGrades();<br />
);<br />
class Student<br />
{<br />
friend void Teacher::assignGrades();<br />
public:<br />
//те же открытые члены, что и раньше<br />
protected:<br />
int semesterHours; //количество часов в семестре<br />
Глава 16. Защищенные члены класса: не беспокоить! 175