cout << "Конструктор TutorPair" << endl ;
noMeetings = 0 ;
}
~TutorPair( ) { cout << "Деструктор TutorPair" << endl ; }
protected :
Student student ;
Teacher teacher ;
int noMeetings ;
} ;
TutorPair* fn( )
{
cout << "Создание объекта TutorPair в функции fn( )"
<< endl ;
TutorPair tp ;
cout << "Создание объекта TutorPair в куче" << endl ;
TutorPair* pTP = new TutorPair ;
cout << "Возврат из функции fn ( )" << endl ;
return pTP ;
}
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
/* Вызов функции fn( ) и возврат объекта TutorPair в куче */
TutorPair* pTPReturned = fn( ) ;
cout << "Получен объект в куче" << endl ;
delete pTPReturned ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
_________________
196 стр. Часть 3. Введение в классы
Функция main( ) вызывает функцию fn( ), которая создаёт объект tp ( область видимости этого объекта ограничена функцией ), а также объект в куче, возвращаемый функции main( ), которая и уничтожает его, возвращая память в кучу.
При выполнении программы вы увидите на экране следующее.
Создание объекта TutorPair в функции fn( )
Конструктор Student
Конструктор Teacher
Конструктор Course
Конструктор TutorPair
Создание объекта TutorPair в куче
Конструктор Student
Конструктор Teacher
Конструктор Course
Конструктор TutorPair
Возврат из функции fn( )
Деструктор TutorPair
Деструктор Teacher
Деструктор Course
Деструктор Student
Получен объект в куче
Деструктор TutorPair
Деструктор Teacher
Деструктор Course
Деструктор Student
Press any key to continue...
Здесь создаются два объекта TutorPair. Первый, tp, является локальным объектом функции fn( ), а второй, рТР, размещается в куче. Первый объект выходит из области видимости при возврате из функции и уничтожается автоматически, а второй остаётся до тех пор, пока функция main( ) не уничтожает его явным образом.
«Последовательность вызовов деструкторов при уничтожении объекта всегда имеет порядок, обратный порядку вызова конструкторов при создании этого объекта.»
[Помни!]
_________________
197 стр. Глава 16. Создание и удаление объектов
Глава 17. АРГУМЕНТАЦИЯ КОНСТРУИРОВАНИЯ...198ОГЛАВЛЕНИЕ
В этой главе...
►Как снабдить конструктор аргументами 198
►Перегрузка конструктора 200
►Определение конструкторов по умолчанию 203
►Конструирование членов класса 204
►Управление последовательностью конструирования 208
Класс представляет тип объекта в реальном мире. Например, мы использовали класс Student для представления студента и его свойств. Точно так же, как и студенты, классы считают себя абсолютно самостоятельными. Однако, в отличие от студентов, класс действительно сам "ухаживает" за собой — он должен всё время поддерживать себя в приемлемом состоянии.
Конструктора по умолчанию, описанного в главе 16, "Создание и удаление объектов", достаточно не всегда. Например, конструктор может инициализировать идентификатор студента нулевым значением — просто чтобы идентификатор не оказался случайным значением, но это нулевое значение может быть некорректным.
Одним словом, программистам на С++ часто нужны конструкторы, которые могут принимать различные аргументы, для того чтобы инициализировать объекты значениями, отличными от значений по умолчанию. В данной главе рассматриваются именно такие конструкторы.