строке 65 прибавить или вычесть указанное количество минут, переданных 
функции-члену в качестве параметра функции nminutes. В основной программе 
(листинг 13.5, строка 12) в операторе appointment.ChangeTime(30); вызывается 
функция-член ChangeTime() для сдвига времени в объекте класса appointment на 30 мин. 
    Когда подобный оператор вызывает функцию-член, C++ передает функции адрес 
объекта, в данном случае адрес appointment. Внутри функции-члена адрес объекта 
доступен с помощью специального ключевого слова this. Все функции-члены 
получают указатель this, ссылающийся на объект класса, для которого 
функция-член была вызвана. В листинге 13.5, в строке 12, функции-члену 
ChangeTime() передается указатель this, в котором хранится адрес appointment. 
Иначе говоря, подобным образом функции-члены ссылаются на объекты класса, для 
которых они были вызваны.
    Вы можете использовать this в качестве указателя на объект типа класса. 
Например, строку 21 в листинге 13.4 можно было написать следующим образом: 

    m = this->month; 

    Говоря обычным языком, этот оператор присваивает ссылочному параметру m 
значение month — члена объекта класса, адресуемого this. Конечно, в 
большинстве случаев нет нужды в непосредственном использовании this. Оператор 
    m = month; по умолчанию ссылается на month — член объекта класса, на 
который ссылается this. 

    Изменение закрытых данных-членов 

    Лучшие способы представления данных часто становятся очевидными на полпути 
в сумасшедшем рывке к завершению проекта. Как обсуждалось раньше, сохранение 
даты и времени в виде числа секунд начиная с фиксированной даты (обычно, 1 
января 1970 года в DOS) более удобно и позволяет использовать другие 
библиотечные функции, использующие такой же формат хранения даты и времени. 
    Функция-член ChangeTime() в листинге 13.4 преобразует данные-члены дату и 
время в длинное целое (timemsecs), что расходует время и производительность в 
случае частых вызовов этой функции. Очевидно, эта функция упростится, если 
дата и время уже будут храниться в виде длинного целого. 
    В листингах 13.6 и 13.7 внесены эти изменения в представлении данных в 
классе TTime. Файл TIME2.H и соответствующий ему модуль TIME2.CPP — не 
законченные программы. Их необходимо скомпилировать и скомпоновать вместе с 
еще одним модулем, подобным APPOINT2.CPP, в котором определена функция mainO. 
Чтобы скомпилировать результативную программу для DOS, введите команду bcc 
appoint2 time2. Запустите получившийся в результате выполняемый файл 
APPOINT2.EXE, введя его имя. Вы также можете скомпилировать каждый модуль 
отдельно и скомпоновать их объектные файлы с помощью нескольких команд: 

    Ьсс	-с appoint2 
    bcc	-с time2 
    Ьсс	appoints.obj time2.obj 

    Таким образом, существует более чем один способ "спустить шкуру с кошки" и 
скомпилировать программу на C++. Для того чтобы скомпилировать и запустить 
APPOINT2 из интегрированной среды, откройте файл проекта APPOINT2.IDE и 
нажмите <Ctrl+F9>, как это вы уже делали с APPOINT1. Не забудьте использовать 
Project\Build all в случае появления ошибок (конечно, вызванных предыдущей 
компиляцией модуля TIME2 для DOS, что делает объектный код несовместимым с Windows). 

    Листинг 13.6.  TIME2.H (измененный класс TTime) 

    1:    // time2.h -- Объявление класса TTime 
    2: 
    3:    #ifndef __TIME2_H 
    4:    #define _TIME2 H 1 // Предотвращение нескольких «include 
    5: 
    6:  class TTime { 
    7:  private: 
    8:     long dt; // Дата и время - в секундах от 1 января 1970 года 
    9:  public: 
  10 :   void Display(void); 
  11:    void GetTime(int &m, int &d, int &y, int &hr, int &min); 
  12:    void SetTime(int m, int d, int y, int hr, int min); 
  13:    char *GetSTime(void); 
  14:    void ChangeTime(long nminutes); 
  15:  } ; 
  16: 
  17: #endif // __TIHE2_H
______________________________________________________ 
    
    
    314 201	Часть III. Программирование на ANSI C++ 