/* Те же открытые члены, что и раньше */
protected :
Teacher *рТ ;
int semesterHours ; /* Количество часов в семестре */
float gpa ;
} ;
void registration( Teacher
&, Student& ) {
/* Инициализация объекта Student */
s.semesterHours = 0 ;
s.gpa = 0 ;
/* Если есть место... */
if ( t.noStudents < 100 )
{
/* Добавляем в конец списка */
t.pList[ t.noStudents ] =
&s ; t.noStudents++ ;
}
}
_________________
185 стр. Глава 15
. Защищённые члены класса: не беспокоить!
В данном примере функция registration( )
может обращаться к обоим классам — и Student и Teacher, связывая их на этапе регистрации, но при этом не входя в состав этих классов.
«Обратите внимание, что в первой строке примера объявляется класс
Student, но не объявляются его члены. Запомните: такое описание класса называется предварительным и в нём описывается только имя класса. Предварительное описание нужно для того, чтобы другие классы, такие, например, как Teacher, могли обращаться к классу Student. Предварительные описания используются тогда, когда два класса должны обращаться один к другому.»[
Помни!]Функция-член одного класса может быть объявлена как друг некоторого другого класса следующим образом:
class Teacher
{
/* Те же члены, что и раньше */
public :
void assignGrades( ) ;
} ;
class Student
{
friend
void Teacher::assignGrades( ) ; public :
/* Те же открытые члены, что и раньше */
protected :
/* Количество часов в семестре */
int semesterHours ;
float gpa ;
} ;
void Teacher::assignGrades( ) ;
{
/* Эта функция имеет доступ к защищённым членам класса Student */
}
В отличие от примера с функциями — не членами, функция-член класса должна быть объявлена перед тем, как класс Student
объявит её другом.Существующий класс может быть объявлен как друг некоторого иного класса целиком. Это означает, что все функции-члены класса становятся друзьями другого класса, например:
_________________
186 стр. Часть 3
. Введение в классы
class Student ;
class Teacher
{
protected :
int noStudents ;
Student *pList [ 100 ] ;
public :
void assignGrades( ) ;
} ;
class Student
{
friend
class Teacher ; public :
/* Те же открытые члены, что и раньше */
protected :
Teacher *рТ ;
/* Количество часов в семестре */
int semesterHours ;
float gpa ;
} ;
Теперь любая функция-член класса Teacher
имеет доступ ко всем защищённым членам класса Student. Объявление одного класса другом другого неразрывно связывает два класса._________________
187 стр. Глава 15
. Защищённые члены класса: не беспокоить!
Глава 16. СОЗДАНИЕ И УДАЛЕНИЕ ОБЪЕКТОВ...188
ОГЛАВЛЕНИЕ
В этой главе...
►Создание объектов
188►Использование конструкторов
189►Что такое деструктор
194Объекты в программе создаются и уничтожаются так же, как и объекты реального мира. Если класс сам отвечает за своё существование, он должен обладать возможностью управления процессом уничтожения и создания объектов. Программистам на С++ повезло, поскольку С++ предоставляет необходимый для этого механизм ( хотя, скорее всего, это не удача, а результат разумного планирования языка ). Прежде чем начинать создавать и уничтожать объекты в программе, обсудим, что значит "создавать объекты".
►Создание объектов...188
Некоторые подчас теряются в терминах класс и объект. В чём разница между этими терминами? Как они связаны?