Стефан Дэвис - С++ для чайников .
- Название:С++ для чайников .
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс. Компьютерное издательство Диалектика
- Год:2007
- Город:Москва
- ISBN:0-7645-6852-3, 978-5-8459-0723-3
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стефан Дэвис - С++ для чайников . краткое содержание
1
empty-line
4
С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
_________________
191 стр. Глава 16. Создание и удаление объектов
Конструирование нескольких объектов...192
Каждый элемент массива конструируется отдельно. Внесём в программу Constructor небольшие изменения.
//
/* ConstructArray — пример вызова конструкторов */
/* для массива объектов */
//
#include
#include
#include
using namespace std ;
class Student
{
public :
Student( )
{
cout << "Конструируем Student" << endl ;
semesterHours = 0 ;
gpa = 0.0 ;
}
/* ...прочие открытые члены... */
protected :
int semesterHours ;
float gpa ;
} ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
cout << "Создание массива из 5 объектов Student" << endl ;
Student s[ 5 ] ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
Вывод этой программы выглядит следующим образом:
Создание массива из 5 объектов Student
Конструируем Student
Конструируем Student
Конструируем Student
Конструируем Student
Конструируем Student
Press any key to continue...
Конструирование составных объектов...192
Если класс имеет данные-члены, которые являются объектами другого класса, конструкторы для этих объектов также будут вызваны автоматически. Рассмотрим следующий пример, в который добавлены команды вывода сообщений, позволяющие увидеть, в каком порядке создаются объекты.
_________________
192 стр. Часть 3. Введение в классы
//
/* ConstructMembers — объекты-члены класса */
/* конструируются до конструирования */
/* класса, содержащего эти объекты */
//
#include
#include
#include
using namespace std ;
class Course
{
public :
Course( ) /* пятый ход */
{
cout << "Конструируем Course" << endl ;
}
} ;
class Student
{
public :
Student( ) /* второй ход */
{
cout << "Конструируем Student" << endl ;
semesterHours = 0 ;
gpa = 0.0 ;
}
protected :
int semesterHours ;
float gpa ;
} ;
class Teacher
{
public :
Teacher( ) /* шестой ход */
{
cout << "Конструируем Teacher" << endl ;
}
protected :
Course c ; /* четвёрый ход */
} ;
class TutorPair
{
public :
TutorPair( ) /* седьмой ход */
{
cout << "Конструируем TutorPair" << endl ;
noMeetings = 0 ;
}
protected :
Student student ; /* первый ход*/
Teacher teacher ; /* третий ход */
int noMeetings ;
} ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
cout << "Создаём объект TutorPair" << endl ;
TutorPair tp ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
_________________
193 стр. Глава 16. Создание и удаление объектов
В результате работы этой программы на экран будут выведены следующие сообщения:
Создаём объект TutorPair
Конструируем Student
Конструируем Course
Конструируем Teacher
Конструируем TutorPair
Press any key to continue...
Создание объекта tp в main( ) автоматически вызывает конструктор TutorPair . Перед тем как управление будет передано телу конструктора TutorPair , вызываются конструкторы для объектов-членов student и teacher .
Конструктор Student вызывается первым, поскольку объект этого класса объявлен первым. Затем вызывается конструктор Teacher .
Конструирование члена ' с ' класса Teache r ( тип этого члена — Course ) является частью процесса построения объекта класса Teacher . Каждый объект внутри класса должен быть сконструирован до того, как будет вызван конструктор класса-контейнера ( в противном случае этот конструктор не будет знать, в каком состоянии находятся члены-данные ).
Только после создания всех этих объектов управление переходит к конструктору класса TutorPair , который теперь может конструировать оставшуюся часть объекта.
«Это не означает, чтоTutorPair отвечает за инициализациюStudent иTeacher . Каждый класс отвечает за инициализацию своего объекта, где бы тот ни создавался.»
[ Помни! ]
►Что такое деструктор...194
Объекты класса уничтожаются так же, как и создаются. Если класс может иметь конструктор для выполнения начальных установок, то он может содержать и специальную функцию для уничтожения объекта. Такая функция-член называется деструктором.
Зачем нужен деструктор...194
Класс может затребовать для своего объекта некоторые ресурсы с помощью конструктора; эти ресурсы должны быть освобождены при уничтожении объекта. Например, если конструктор открывает файл, перед окончанием работы с объектом класса или программы этот файл следует закрыть. Возможен и другой вариант: если конструктор берёт память из кучи, то она должна быть освобождена перед тем, как объект перестанет существовать. Деструктор позволяет делать это автоматически, не полагаясь на вызов необходимых функций-членов в программе.
Работа с деструкторами...194
Деструктор имеет то же имя, что и класс, но только с предшествующим ему символом тильды ( ~ ) ( С++ последователен и здесь: ведь символ тильды не что иное, как символ оператора "нет", т.е. деструктор — это отрицание конструктора ).
_________________
194 стр. Часть 3. Введение в классы
Как и конструктор, деструктор не имеет типа возвращаемого значения. С учётом сказанного деструктор класса Student будет выглядеть так:
class Student
{
public :
Student( )
{
semesterHours = 0 ;
gpa = 0.0 ;
}
~Student( )
{
/* Все используемые ресурсы освобождаются здесь */
}
/* ...остальные открытые члены... */
protected :
int semesterHours ;
float gpa ;
} ;
Деструктор вызывается автоматически, когда объект уничтожается или, если говорить языком С++, происходит его деструкция. Чтобы избежать тавтологии ( "деструктор вызывается для деструкции объекта" ), я по возможности старался не применять этот термин. Можно также сказать "когда объект выходит из области видимости". Локальный объект выходит из области видимости, когда функция, создавшая его, доходит до команды return . Глобальный или статический объект выходит из области видимости, когда прекращается работа программы.
Читать дальшеИнтервал:
Закладка: