Здавалка
Главная | Обратная связь

Объявление класса TTime в заголовочном файле позволяет использовать этот класс в других модулях.



В листинге 2.4 приводятся функции-члены класса TTime. Подобная организация классов в заголовочных файлах и программных модулях типична. Следует объявлять один или несколько классов в заголовочном файле, заканчивающемся на .H, и приводить тела функций-членов класса в отдельном файле, заканчивающимся на .CPP.

Для компиляции этого модуля из DOS введите команду bcc -c time1.c. Для компиляции его из интегрированной среды сделайте текущим окно с TIME.CPP, установите TargetExpertвEasyWin и нажмите <ALT+F9>.

Замечание

Модуль TIME.CPP остается все еще неполной программой (в нем хватает функции main()). Вы можете скомпилировать TIME.CPP в объектный файл TIME1.OBJ, но для того, запустить результат на выполнение, вы должны написать еще один модуль, содержащий main(). TIME1.CPP содержит программный код, содержащий реализацию класса TTime. Компоновщик может присоединить этот модуль (возможно, вместе с другими) для создания законченной программы. Поскольку модуль TTime скомпилирован отдельно, его можно скомпоновать с несколькими различными программами. Это делает отдельные модули, подобные TTime, идеальными для сохранения общего программного кода для использования в различных приложениях.

 

Листинг 2.4. TIME1.CPP (реализация класса TTIME)

1://time1.cpp-реализациякласса Ttime

2:

3: #include <iostream.h>

4: #include <stdio.h>

5: #include <dos.h>

6: #include <string.h>

7: #include “time1.h”

8:

9: //Отображение даты и времени

10: void TTime::Display(void)

11: {

12: char s[30];

13: sprintf(s,“Date:%02d/%02d/%04d Time: %02d:%02d”,

14: month, day, year, hour, minute);

15: cout<< s << “\n”;

16: }

17:

18: // Возвращает текущие данные-//члены дату и время

19: void TTime: :GetTime(int &m, int &d, int &y, int &hr, int &min)

20: {

21: m = month; // Возвращение данных-членов тому, кто вызвал функцию

22: d = day;

23: y = year;

24: hr = hour;

25: min = minute;

26: }

27:

28://Устанавливает данные-члены //дату и время

29: void TTime::SetTime(int m, int d, int y, int hr, int min)

30: {

31: month = m; // Присваивание //аргументов данным-членам

32: day = d;

33: year = y;

34: hour = hr;

35: minute = min;

36: }

37:

38: // Возвращает дату и время //объекта TTime в виде символьной //строки

39:char *Ttime::GetSTime(void)

40: {

41: char buffer[40]; // Побольше пространство

42: char *cp; // Указатель на результат, возвращаемый функцией

43:

// формирование строки с закрытыми данными-//членами month, day, year, hour и minute

44:sprintf(buffer,“Date:%02d/%02d/%04d Time: %02d:%02d\n”,

45: month, day, year, hour, minute );

//копирование буферной строки в новую //строку в динамически выделенной //области памяти

46: cp = strdup(buffer);

// Копирование с наименьшим возможным размером

47: return cp;

48: }

49:

50: //Добавление nminutes (может //быть возможным) к текущему //времени

добавляющая или вычитающая указанное количество минут от даты и времени объекта

51: void TTime::ChangeTime(long nminutes)

52: {

53: struct date ds;

54: struct time ts;

55: long timeinsects;

56:

57: ds.da_year = year;

58: ds.da_mon = month;

59: ds.da_day = day;

60: ts.ti_hour = hour;

61: ts.ti_min = minute;

62: ts.ti_sec = 0;

63: ts.ti_hund = 0;

// преобразование даты и времени объекта класса в ..

//формат длинного целого и обратно

64: timeinsecs=dostounix(&ds,&ts);

65: timeinsecs += (nminutes * 60);

66: unixtodos(timeinsects, &ds, &ts);

67: year = ds.da_year;

68: month = ds.da_mon;

69: day = ds.da_day;

70: hour = ts.ti_hour;

71: minute = ts.ti_min;

72: }

 

 

Чтобы скомпилировать APPOINT. CPP в законченную программу, следует объединить все разрозненные модули TIME1. Команды, приведенные в предыдущем параграфе, позволяют сделать это для DOS. Для WINDOWS необходимо из интегрированной среды открыть файл проекта APPOINT1.IDE с помощью команд project\open project…В проекте указываются основной программный модуль (APPOINT.CPP), отделенный модуль(TIME1.CPP) и целевой модель EasyWin _APPOINT1.EXE. Таким же образом следует указать и прочие отдельные модели. После открытия файла проекта нажмите <Ctrl+F9> для компиляции всех моделей, компоновки получившихся в результате компиляции объектных файлов и запуска на выполнение конечного целевого кода. Если у вас получились ошибки, которые могут быть вызваны компиляцией модуля TIME1 для DOS или не-EasyWin Windows, используйте для компиляции Project|build All. Также установите правильные опции local options для APPOINT1.EXE (щелкните правой кнопкой мыши над целевым именем), установив верные пути для заголовочных и библиотечных каталогов Borland C++.

 

Листинг 2.5. AP1.CPP (отображение примера календаря встреч)

1: #include <iostream.h>

2: #include <stdio.h>

3: #include “time1.h”

4:

5: main()

6: {

7: TTime ap;

8:

9: ap.SetTime(7, 21, 1996, 8, 30);

// добавление 30 мин к дате и времени в appointment

10: for (int slots = 1; slots <= 17; slots++) {

11: ap.Display();

12: ap.ChangeTime(30);

13: }

14: return 0;

15: }

 

 

Когда подобный оператор вызывает функцию-член, С++ передает функции адрес объекта, в данном случае адрес appointment. В нутре функции-члена адрес объекта доступен с помощью специального ключевого слова this. Все функции члены получают указатель this, ссылающийся на объект класса, для которого функция-член была вызвано. В листинге 13.5, в строке 12, функции-члену ChangTime() передаются указатель this, в котором хранится адрес appointment. Подобным образом функции-члены ссылаются в объекте класса, для которых они были вызваны.

Можно использовать this в качестве указателя на объект типа класса. Например, строку 21 в листинге 13.4 можно было написать следующим образом:

m = this ->month;







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.