Конструирование составных объектов...192
Если класс имеет данные-члены, которые являются объектами другого класса, конструкторы для этих объектов также будут вызваны автоматически. Рассмотрим следующий пример, в который добавлены команды вывода сообщений, позволяющие увидеть, в каком порядке создаются объекты.
_________________
192 стр. Часть 3. Введение в классы
//
/* ConstructMembers — объекты-члены класса */
/* конструируются до конструирования */
/* класса, содержащего эти объекты */
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
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.
Конструирование члена 'с' класса Teacher ( тип этого члена — Course ) является частью процесса построения объекта класса Teacher. Каждый объект внутри класса должен быть сконструирован до того, как будет вызван конструктор класса-контейнера ( в противном случае этот конструктор не будет знать, в каком состоянии находятся члены-данные ).
Только после создания всех этих объектов управление переходит к конструктору класса TutorPair, который теперь может конструировать оставшуюся часть объекта.
«Это не означает, что TutorPair отвечает за инициализацию Student и Teacher. Каждый класс отвечает за инициализацию своего объекта, где бы тот ни создавался.»
[Помни!]
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ