значений данным-членам объекта. Конечно, с использованием конструкторов 
вся эта работа автоматически выполняется во время создания объектов. С помощью 
конструкторов объекты класса гарантированно инициализируются, что помогает 
предупредить одну из самых распространенных ошибок в программировании — 
использование неинициализированных переменных. 

    СОВЕТ

    Попробуйте с помощью встроенного отладчика исследовать, как в приведенном 
образце программы вызываются различные конструкторы TTime Сначала с помощью 
меню Project откройте CONSTRUC.IDE, затем выберите CONSTRUC.CPP в окне проекта 
для того, чтобы открыть этот файл Поместите курсор на первый оператор mane() и 
нажмите <F5> для установки точки прерывания на этой строке. Установите также 
точки прерывания на следующих пяти строках. Все шесть строк должны выделяется 
на цветном мониторе красным цветом. Нажмите <Ctrl+F9> для компиляции и запуска 
программы. Выполнение прервется на первой точке прерывания. Для того чтобы 
определить, какой конструктор вызывается в операторе, нажмите <F9> для входа в 
тело конструктора. Это приведет вас к конструктору по умолчанию. Нажмите 
<Ctrl+F9> лдя продолжения выполнения программы до следующей точки останова и 
затем опять нажмите <F7> для входа в вызов функции, на этот раз вы попадете во 
второй конструктор класса. Повторяйте эти действия до тх пор, пока программа 
не начнет отображение.

    Использование деструкторов 

    Еще один пример программы демонстрирует использование класса TTime из 
TIME6.H и TIME6.CPP (листинги 13.18 и 13.19), а также показывает, как 
используется деструктор для очистки объекта класса при его выходе из области 
видимости. Скомпилируйте листинг 13.21, введя в DOS команду bcc destruc timeG 
или из интегрированной оболочки откройте с помощью меню Project проектный файл 
DESTRUC.IDE; нажмите <Ctrl+F9> для компиляции и запуска программы как 
приложения Easy Win. Поскольку DESTRUC использует модуль TIME6 из предыдущего 
листинга и вы могли скомпилировать TIME6 ранее для DOS, вам, может быть, 
придется применить команду Project\Build all для компиляции этой программы 

    Листинг 13.21.   DESTRUC.CPP (использование деструктора TTime) 

    1:   #include <iostream.h> 
    2:   #include <stdio.h> 
    3:   #include "time6.h" 
    4: 
    5:   void f(void); 
    6: 
    7:   main() 
    8:    { 
    9:       f(); 
   10:     return 0; 
   11:    } 
   12: 
   13:   void f(void) 
   14:    { 
   15:     TTime today; 
   16:     const char *sp; 
   17: 
   18:     sp = today.GetSTime(); 
   19:     cout « "First time:   " « sp ; 
   10:     sp = today.GetSTime(); 
   11:     cout « "Second time:   " « sp; 
   12:    } 
    
    Функция main() в DESTRUC.CPP вызывает другую функцию f(), приведенную в 
строках 13-22. Внутри функции в строке 15 объявляется автоматический объект 
класса TTime today, локальный в области видимости функции. Поскольку локальный 
автоматический объект создается вместе с вызовом функции, в которой он 
объявлен, C++ вызывает для today конструктор Ttime() по умолчанию в качестве 
части кода, выполняемого функцией при запуске. Подобная операция выполняется 
всякий раз при вызове функции. (Вы можете проверить этот факт из 
интегрированной среды с помощью встроенного отладчика.) 
    В строках 18-21 вызывается функция-член GetSTime() для объекта класса 
today. Результат этой функции сохраняется в локальном символьном указателе sp. 
Вернемся к листингу 13.19, в котором приводится реализация GetSTime() (строки 
66-72). Функция-член сначала проверяет, не содержит ли член dts нуль. Если 
нет, то возвращается dts, иначе вызываются strdup() и ctimeO для преобразования 
текущей даты и времени в символьную строку, с сохранением адреса строки в 
символьном указателе dts — закрытом члене класса. Таким 

    Глава 13. Программирование классов     327 
