    Класс TTime в TIME2.H идентичен TTime в TIME1.H за исключением того, что в 
объявлении присутствует лишь одно закрытое длинное целое dt. Удалены 
индивидуальные компоненты month, day, year, hour и minute. Конечно, несмотря 
на проведенные изменения, открытые функции-члены — те же самые, и нет нужды в 
изменении операторов, в которых используется класс TTime. 
    Собственно функции-члены нуждаются в изменении, но, по крайней мере, эта 
работа ограничена известным числом легко идентифицируемых функций. В листинге 
13.7 решается эта задача. 

    Листинг 13.7.  TIME2.CPP (реализация измененного класса TTime)	: 

    1:    // time2.cpp -- Реализация класса TTime 
    2
    3:	#include <iostream.h>
    4:	#include <time.h>
    5:	#include <dos.h>
    6:	#include <string.h>
    7:	#include "time2.h"
    8: 
    9:    // Отображение даты и времени; 
    10:     void   TTime:: Display( void)) 
    11:     { 
    12:	cout « ctime(&dt) ; 
    13:      } 
    14: 
    15:	// Возвращает текущие данные-члены (дату и время                       
    16:	void TTine::GetTime(int &m,  int id,   int &y,  int &hr,  int &min)    
    17:	{ 
    18:	  struct date ds; 
    19:	  struct tine ts; 
    20: 
    21:	  unixtodos(dt,  &ds,  &ts); 
    22:	  у = ds.da_year; 
    23:	  m = ds.da_mon; 
    24:	  d = ds.da_day; 
    25:          hr = ts.ti_hour; 
    26:          nin = ts.ti_min; 
    27:	} 
    28: 
    29:	// Устанавливает член dt 
    30:	void TTime::SetTime(int m,   int d,  int y,  int hr,  int min) 
    31:	{ 
    32:	struct date ds; 
    33:	struct time ts; 
    34; 
    35:	ds.da_year = у; 
    36:	ds.da_mon = m; 
    37:	ds.da day = d;                                 
    38:	ts.tilhour = hf 
    39:	ts.tijnin = min; 
    40:	ts.ti_sec = 0; 
    41:	ts.ti hund = 0; 
    42:	dt = dostounix(&ds, &ts); 
    43:	} 
    44: 
    45:	// Возвращает дату и время в виде строки 
    46:	char «TTime: :GetSTime(void) 
    47:	{ 
    48:	char *cp = strdup(ctime(&dt));
    49:	return ср; 
    50         } 
    51 
    52:	// Добавление nninutes (может быть отрицательным) к текущему времени
    53:	void TTime::ChangeTime(long nminutes) 
    54:	{ 
    55:	dt += (nminutes * 60); 
    56:	} 

    Новый модуль существенно улучшен по сравнению со старым и занимает меньше 
памяти. Теперь, когда дата  и время сохраняются в виде длинного целого, в 
строке 12 просто вызывается библиотечная функция ctime( ) для преобразования 
даты и времени в строку ASCII. Функции-члены GetTimeO и PutTimeO стали 
немyого сложнее, чем до этого, поскольку им теперь необходимо преобразовать 
дату и время в раздельные параметры и обратно с помощью библиотечных функций 
unixtodosO и dostounixO, упоминавшихся ранее. 
    
    13. Программирование классов    -	315 202 
