    Листинг 13.18. TIME6.H (объявление класса TTime с конструкторами и деструктором) 

    1:   // time6.h -- Объявление класса TTime 2: 
    3:   #ifndef __TIME6_H 
    4:   #define __TIME6_H 1 // Предотвращение нескольких «include 5: 
    6:   #include <iostream.h>	
    7:   #include <time.h>           
    8:   #include <string.h> 
    9:
    10:	class TTime {
    11:	private:
    12:	   long dt; // Дата и время - в секундах от 1 января 1970 года 
    13:	   char *dts; // Представление	даты и времени в виде строки 
    14:	   void DeleteDts(void); // Удаляет указатель tits 
    15:	public: 
    16:	  TTime() ; // Конструктор 
    17:	  TTime( int m, int d = -1, int y =	-1,	//	Конструктор 
    18:		int hr = -1, int min = -1) ; 
    19:	 ~TTime(); // Деструктор 
    20:	 void Display(void) { cout «	ctime(Sdt);			}
    21:	 void GetTime( int &m, int &d,	int &y, int	&hr, int tain ) ; 
    22:  	 void SetTime(int m = -1, int d =	-1, int y = -1
    23:	 	       int hr = -1, int min = -1);				
    24:		const char *GetSTime(void);				
    25:	void ChangeTime(long nminutes)                                         
    26:	{ dt += (nminutes * 60); DeleteDts(); } 
    27:	}
    28: 
    29:	#endif // __TIHE6_H 

    Конструкторы объявлены как функции-члены, не возвращающие никаких 
значений, с произвольным числом параметров любого типа (за исключением 
классов, которым принадлежат эти конструкторы). Конструкторы, как правило, 
объявляются в открытой секции, но могут определяться в любом месте класса. Они 
всегда имеют такое же имя, как и класс, для которого объявляются. Они не 
всегда могут быть скомпилированы встраиваемыми. 
    В строке 16 объявляется TTime() в качестве конструктора класса TTime. 
Поскольку конструктор объявляется без параметров, он вызывается по умолчанию. 
В строках 17-18 объявляется второй перегруженный конструктор для TTime. Этот 
конструктор также имеет одинаковое с классом имя, но на этот раз он объявлен с 
пятью целочисленными параметрами, из которых последние четыре передают 
значения по умолчанию -1. В TTime также объявлен в строке 19 деструктор, но о 
нем речь пойдет позже. 
    В дополнение к конструкторам и деструктору новый класс TTime имеет еще два 
отличия. В строке 13 добавлен второй закрытый член класса — символьный 
указатель dts. Этот указатель содержит адрес строкового представления даты и 
времени. Как вы увидите позже, хранение даты и времени в виде символьной 
строки помогает облегчить управление памятью в классе, а также может улучшить 
быстродействие программы. В строке 14 добавлена закрытая функция-член 
DeleteDts(), освобождающая память, на которую указывает dts. Закрытые 
функции-члены могут вызываться только другими функциями-членами класса и, как 
и другие закрытые члены, недоступны вне класса. Невозможно в произвольном 
операторе программы вызвать DeleteDts() и освободить память, на которую 
ссылается dts. Только члены класса имеют подобную привилегию. 
    Перед рассмотрением примера использования конструктора, изучим реализацию 
TTime в листинге 13.19. Как и в предыдущей версии класса TTime, TIME6.CPP — 
отдельный модуль, в котором отсутствует функция main(), следовательно, вы 
можете скомпилировать его, но не сможете запустить на выполнение. Далее будет 
приведен листинг, использующий модули объявления класса и его реализации. 

    Листинг 13.19.  TIME6.CPP (реализация TTime)

    1:   // time6.cpp -- реализация класса TTime 
    2: 
    3:   #include <dos.h>	
    4:   #include "time6.h" 
    5: 
    6: // Конструктор по умолчанию 
    7: TTime::TTime() 
    8: { 
    9:   dts = NULL; // Обнуление текущей строки 
  10:   SetTime(-1, -1, -1, -1, -1); 
  11: } 
  12:	
    

    324	Часть III. Программирование на ANSI C++ 
