Стефан Дэвис - С++ для чайников .
- Название:С++ для чайников .
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс. Компьютерное издательство Диалектика
- Год:2007
- Город:Москва
- ISBN:0-7645-6852-3, 978-5-8459-0723-3
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стефан Дэвис - С++ для чайников . краткое содержание
1
empty-line
4
С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
protected :
int semesterHours ; /* Количество часов в семестре */
float gpa ;
} ;
/* Эта функция — друг класса Student и имеет доступ к его защищённым членам */
void initialize( Student *pS )
{
pS -> gpa =0 ; /* Теперь эти строки законны */
pS -> semesterHours = 0 ;
}
Одна и та же функция может одновременно быть объявлена другом нескольких классов. Это может быть удобно, например, для связи двух классов. Правда, такого рода связь не очень приветствуется, поскольку делает оба класса зависимыми друг от друга. Однако, если два класса взаимосвязаны по своей природе, их объединение может оказаться не столь плохим решением.
class Student ;
class Teacher
{
friendvoid registration( Teacher & , Student & ) ;
public :
void assignGrades( ) ;
protected :
int noStudents ;
Student *pList[ 100 ] ;
} ;
class Student
{
friend void registration( Teacher & , Student & ) ;
public :
/* Те же открытые члены, что и раньше */
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
{
friendvoid 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
{
friendclass Teacher ;
public :
/* Те же открытые члены, что и раньше */
protected :
Teacher *рТ ;
/* Количество часов в семестре */
int semesterHours ;
float gpa ;
} ;
Теперь любая функция-член класса Teacher имеет доступ ко всем защищённым членам класса Student . Объявление одного класса другом другого неразрывно связывает два класса.
_________________
187 стр. Глава 15. Защищённые члены класса: не беспокоить!
ОГЛАВЛЕНИЕ
В этой главе...
►Создание объектов188
►Использование конструкторов189
►Что такое деструктор 194
Объекты в программе создаются и уничтожаются так же, как и объекты реального мира. Если класс сам отвечает за своё существование, он должен обладать возможностью управления процессом уничтожения и создания объектов. Программистам на С++ повезло, поскольку С++ предоставляет необходимый для этого механизм ( хотя, скорее всего, это не удача, а результат разумного планирования языка ). Прежде чем начинать создавать и уничтожать объекты в программе, обсудим, что значит "создавать объекты".
►Создание объектов...188
Некоторые подчас теряются в терминах класс и объект. В чём разница между этими терминами? Как они связаны?
Я могу создать класс Dog , который будет описывать соответствующие свойства лучшего друга человека. К примеру, у меня есть две собаки. Это значит, что мой класс Dog содержит два экземпляра — Труди и Скутер ( надеюсь, что два: Скутера я не видел уже несколько дней... ).
«Класс описывает тип предмета, а объект — это экземпляр класса.Dog является классом, а Труди и Скутер — объектами. Каждая собака представляет собой отдельный объект, но существует только один классDog , при этом не имеет значения, сколько у меня собак.»
[ Помни! ]
Объекты могут создаваться и уничтожаться, а классы попросту существуют. Мои собаки Труди и Скутер приходят и уходят, а класс Dog ( оставим эволюцию в стороне ) вечен.
Различные типы объектов создаются в разное время. Когда программа начинает выполняться, создаются глобальные объекты. Локальные объекты создаются, когда программа сталкивается с их объявлением.
«Глобальный объект является объектом, объявленным вне каких-либо функций. Локальный объект объявляется внутри функции, а следовательно, является локальным для функции. В приведённом ниже примере переменнаяme является глобальной, а переменнаяnoМе — локальной по отношению кpickOne( ) .»
[ Помни! ]
int me = 0 ;
void pickOne( )
{
int noMe ;
}
_________________
188 стр. Часть 3. Введение в классы
Интервал:
Закладка: