05.09.2016 Views

Стефан Р. - С++ Для чайников

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

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

Saved successfully!

Ooh no, something went wrong!