    67:	year = ds.da_year; 
    68:	month = ds.da_mon; 
    69:	day = ds.da_day; 
    70:	hour = ts.ti_hour; 
    71:	minute = ts.ti min; 
    72:	} 

    Перед изучением того, как в TIME.CPP реализован класс TTime, скомпилируйте 
и запустите листинг 13.5 — образец программы, использующей класс для 
отображения страницы из произвольного календаря встреч. (К счастью для вас, 
ваш календарь не показывает встреч — весь день в вашем распоряжении.) Для 
компиляции программы из DOS введите bcc appointl timel, или, если у вас есть 
уже скомпилированный модуль TIME1, введите bcc appointl timel.obj.

    ЗАМЕЧАНИЕ 

    Чтобы скомпилировать APPOINT.CPP в законченную программу, следует 
объединить все разрозненные модули ТТМЕ1. Команды, приведенные в предыдущем 
параграфе, позволяют сделать это для DOS. Для WINDOWS необходимо из 
интегрированной среды открыть файл проекта APPOINT1.IDE с помощью команд 
Project\Open project... В проекте указываются основной программный модуль 
(APPOINT.CPP), отдельный модуль (TIME1.CPP) и целевой модуль East/Win — 
APPOINT1.EXE Таким же образом следует указать и прочие отдельные модули. После 
открытия файла проекта нажмите <Ctrl+F9> для компиляции всех модулей, 
компоновки получившихся в результате компиляции объектных файлов и запуска на 
выполнение конечного целевого кода. Если у вас получились ошибки, которые 
могут быть вызваны компиляцией модуля TIME1 для DOS или не EasyWin Windows, 
используйте для компиляции Project\Build All. Также установите правильные 
опции local options для APPOINT1.EXE (щелкните правой кнопкой мыши над целевым 
именем), установив верные пути для заголовочных и библиотечных каталогов 
Borland C++. Если неприятности не закончились, перечитайте инструкции к 
компиляции проектов в конце главы 2. 

    Листинг 13.5. APPOINT1.CPP (отображение примера календаря встреч) 

    1:	#include <iostream.h> 
    2:	#include <stdio.h> 
    3:	#include "time1.h" 
    4: 
    5:	main() 
    6:	{ 
    7:	  TTime appointment; 
    8: 
    9:	  appointment,SetTime(7, 21, 1996, 8, 30); 
    10:	  for (int slots = 1; slots <= 17; slots++) { 
    11:	    appointment,Display(); 
    12:	    appointment.ChangeTime(30); 
    13:	  } 
    14:	  return 0; 
    15:	}

    В строке 3 включается TIME1.H, что делает доступным объявление класса 
TTime в программе. В строке 7 объявляется объект класса appointment типа 
TTime. В строке 9 компонентам appointment присваиваются значения даты и 
зремени, после чего в цикле for выводится последовательность встреч с разницей 
в 30 мин. В строке 12 вызывается функция-член ChangeTime() для добавления 30 
мин к дате и времени в appointment. В любом случае программа вызывает 
функции-члены для выполнения действий над appointment. 
    Теперь, когда вы увидели, как используется класс TTime, вернемся к 
ТГМЕ1.СРР (листинг 13.4), в котором приводятся функции-члены класса. Кое-что в 
программном коде повторяется из предыдущих листингов. Новые функции-члены — 
GetSTime() (строки 39-48), возвращающая в виде символьной строки дату и время 
объекта TTime, и ChangeTime() (строки 51-72), добавляющая или вычитающая 
указанное количество минут от даты и времени объекта. 
    Эти две новые функции-члены предварены TTime:: для опознания их 
компилятором как членов класса TTime. Функция-член GetSTime() вызывает sprintf() 
(строка 44) для формирования строки с закрытыми данными-членами month, day, 
year, hour и minute, вставленными с соответствующей пунктуацией. Затем в 
строке 46 вызывается strdup() для копирования этой буферной строки в новую 
строку в динамически выделенной области памяти. В строке 47 возвращается 
указатель на строку, которую программа может удалить с помощью вызова функции free(). 
    Функция-член ChangeTime() вызывает две библиотечные функции — dostounixO и 
unixtodosO для преобразования даты и времени объекта класса в формат длинного 
целого и обратно. Таким путем легче всего в 
    
    Глава 13. Программирование классов	313 