    Листинг 13.15. TIME5.H (новая версия класса TTime с использованием 
параметров функций-членов по умолчанию) 

    1: // time5.h -- объявление класса TTime 
    2:   #ifndef __TIME5_H 
    3: 
    4:   #define _TIME5_H 1 // Предотвращение нескольких #include 
    5:   #include <iostream.h> 
    6:   #include <time.h> 
    7:   #include <string.h> 
    8:
    9:
    10:	class TTime {
    11:	private:	
    12:	  long dt; // Дата и время - в секундах от	1 января 1970 года 
    13:	public: 
    14:           void Display(void) { cout « ctime(&dt) }
    15:	  void GetTime( int 4m, int &d, int &y, int &hr, int imin ) ; 
    16:	  void SetTime(int m =	-1, int d =	-1, int	У = -1, 
    17:	                           int hr = -1, int min = -1 ) ; 
    18:	  char *GetSTime(void) 
    19:	  {
    20:	     char *cp = strdup(ctime( &dt ) );			
    21:	    return cp;
    22:	  }			i 
    23:	  void ChangeTime( long nminutes ) { dt += (nminutes * 60) ;  }              
    24:      }; 
    25: 
    26:     #endif // __TIME5_H 
    
    Каждому из параметров SetTimeO в строках 16-17 присваивается значение по 
умолчанию -1, использовавшееся для идентификации неуказанных параметров в 
вызове этой функции-члена. Значения парамАров по умолчанию должны следовать за 
всеми прочими параметрами в объявлении функции-члена. В данном объекте класса 
TTime с именем today оператор 
    
    today. SetTimed,   15,   1998);	

передает дату 15 января 1998 года первым трем параметрам SetTimeO. Поскольку 
неуказанные аргументы принимают значения по умолчанию, последние два аргумента 
неявным образом устанавливаются равными -1, и предыдущий оператор компилируется 
так, как если бы он был написан                                             

    today. SetTimed,   15,   1998,   -1,   -1); 

    Новая реализация класса TTime значительно проще в сравнении с перегрузкой 
функций-членов SetTime(). В листинге 13.16 приводится результат. Файл TIME5.CPP 
— отдельный модуль, вы можете его скомпилировать, но не можете запустить его 
на выполнение. 
    Значения функций-членов по умолчанию не приводятся в заголовке функции в 
строке 21. Значения по умолчанию могут присутствовать только в объявлении функции-члена. 
    В листинге 13.17 используется новый класс TTime. Демонстрируется, что в 
этом случае параметры функций-членов по умолчанию позволяют использовать 
переменное число аргументов в вызовах функции SetTime(). Конечный результат 
такой же, как и в приведенном ранее .примере перегрузки, но реализация класса 
стала намного проще. Скомпилируйте и скомпонуйте программу вместе с модулем 
поддержки TIME5, введя команду DOS bcc default time5. Или же скомпилируйте и 
запустите программу как Easy Win-приложение, открыв с помощью меню Project 
файл проекта DEFAULT. IDE и нажав <Ctrl+F9>. 

    Листинг 13.16.  TIME5.CPP (реализация упрощенного класса TTime) 

    1:   // time5.cpp — Реализация класса TTime 
    2: 
    3:      #include <dos.h> 
    4:      #include "time5.h" 
    5:
    6:	// Возвращает текущие данные-члены дату и время 
    7:	void TTime: : GetTime( int &m, int &d, int &y, int &hr, int &min) 
    8:	{ 
    9:	  struct date ds; 
    10:	  struct time ts; 11: 
    12:	  unixtodos(dt, &ds, &ts); 
    13:	  у = ds.da_year; 
    14:	  m = ds.da_mon;                                 
    15:	  d = ds.da_day; 


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