    Функции-члены GetSTimeO и ChangeTimeO существенно улучшены (строки 45-56). 
GetSTimeO передает результат функции ctimeO непосредственно strdupO для 
возвращения даты и времени в виде строки. Но лучше всего преобразовалась 
ChangeTimeO, выродившись в простой оператор. Поскольку дата и время теперь 
хранятся в нужной форме, нет больше необходимости в операторах преобразования 
из предыдущей версии. 
    Изменение формата данных для упрощения кода — сберегающий время стиль 
оптимизации программ. С помощью ООП и классов C++ изменения фундаментальной 
структуры данных не обязательно потребуют соответствующих изменений 
операторов, использующих эту информацию. Как показано в листинге 13.8, 
основная программа в проекте "не помнит" об основных модификациях, сделанных в 
классе TTime. 
    Новая главная программа. APPOINT2.CPP, идентична APPOINT1.CPP, за 
исключением строки 3, включающей заголовочный файл TIME2.H вместо TIME1.H. В 
этом маленьком примере действительные преимущества ООП практически не заметны. 
Конечно, в программе из 10,000 строк с сотнями объектов класса TTime изменений 
потребуется не больше, чем в этом примере! Инкапсуляция данных и функций в 
классе локализует изменения в коде путем запрещения прямого доступа к данным, 
минимизируя таким образом потенциальное количество модификаций, требующихся 
после изменения внутреннего представления данных. 

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

    1:	#include <iostream.h> 
    2:	#include <time.h> 
    3:	#include "time2 h" 
    4: 
    5:      main() 
    6      { 
    7:	TTime apooint~ent; 
    8 
    9:      appointment.SetTiee(7,  21.  1996. 8.  30); 
  10:      for ( int slots = 1:  slots <= 17; slots++ ) { 
  11:        appointment. DisplayO: 
  12:        appointment.ChangeTi«e(30); 
  13:       } 
  14:      return 0; 
  15:    } 


    Встраиваемые функции-члены 

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


    Обычные функции-члены вызываются стандартным способом 
    Встраиваемые функции-члены вставляются непосредственно в программный код 
    // 
    ,\		Программа 
    оператор;	f1() 
    Встраиваемая функция-член			Обычная 
    »();            *	функция -член 
    t2();	Операторы 
    Операторы 
    
    
    Рис. 13.3. Встраиваемые функции-члены вставляются непосредственно в 
программный код 


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