    16:         hr = ts.ti_hourr;  
    17:	min = ts.ti_min;
    18:         }
    19:
    20:      // Устанавливает член dt                                      
    21:      void TTime::SetTime(int m,  int d,  int y,~ int hr,  int min) 
    22:      {
    23:	struct date ds; 
    24:	struct time ts;                  
    25:
    26:	getdate(Sds);  // Получение текущих даты и времени 
    27:	gettirae(&ts); 
    28:	if (у >= 0) ds.da_year = у; 
    29:	if (m >= 0) ds.da_mon = m; 
    30:	if (d >= 0) ds.da_day = d; 
    31:	if (hr >= 0) ts.ti_hour = hr; 
    32:	if (min >= 0) ts.tijnin = min; 
    33:	ts.ti_sec = 0; 
    34:	ts.ti_hund = 0; 
    35:	dt = dostounix(&ds,  &ts); 
    36:	} 
    
    Листинг 13.17.  DEFAULT.CPP (использование параметров функций-членов по умолчанию) 

    1:	#include <iostream.h>               
    2:	#include <stdio.h>     
    3:	#include "times. h"	
    4:		
    5: 
    6:	main()          
    7: 
    8.	TTime appointment;   
    9:	appointment . SetTime( ) ; 
    10:	appointment . Display ( ) ; 
    11:	appointment. SetTime(8);	
    12:	appointment . Display ( ) ;	
    13:	appointment. SetTime( 8, 1); 
    14:	appointment. Display( ) ; 
    15:	appointment. SetTime(8, 1, 1996); 
    16:	appointment . Display( ) ; 
    17:	appointment. SetTime(8, 1, 1996, 8); 
    18:	appointment. Display( );	
    19:	appointment. SetTiue(8, 1. 1996, 8,. 30);	
    20:	appointment . Display ( ) ;	
    21:	return 0;	
    22:	} 


    Конструкторы и деструкторы 


    До сих пор инициализация объекта класса происходила при его создании. 
Возьмем любой из предыдущих классов TTime. Объявление	

    TTime anyTime ;    
    
создает объект класса anyTime типа TTime, но не инициализирует его 
данные-члены. Если вы забыли инициализировать объект класса, оператор 

   anyTime.Display(); 

скорее всего выведет всякий мусор или, по крайней мере, неверную дату и время. 
    В классах может быть объявлено несколько конструкторов для автоматической 
инициализации объекта класса при его создании, практически исключая таким 
образом возможность ошибок, вызванных использованием неинициализированных 
данных. В классах также может быть объявлен (но только один) деструктор, 
вызываемый для очистки при выходе объекта класса из области видимости. 
Конструкторы и деструкторы похожи на обычные функции-члены, но они реже 
вызываются непосредственно в операторах программы. C++ автоматически вызывает 
конструкторы и деструкторы для инициализации и очистки объектов класса. 
    В листинге 13.18 объявляется еще одна версия класса TTime. Новый класс 
имеет два конструктора для инициализации заново созданных объектов класса TTime. 
В нем также имеется деструктор для очистки старых объектов класса TTime, выходящих 
из области видимости. Это только заголовочный файл. Вы не можете его скомпилировать. 

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