/* Те же открытые члены, что и раньше */
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
Некоторые подчас теряются в терминах класс и объект. В чём разница между этими терминами? Как они связаны?