    •   Изменить структуру TTime путем удаления старых членов и добавления 
одного-единственного нового длинного целого. (Вы даже можете не использовать 
структуру вообще.) 
    •   Переделать все функции, подобные Display(),  которые используют 
параметры TTime или возвращают структуру TTime, указатель или ссылку на нее. 
    •   Выловить и модифицировать все операторы, в которых используются 
компоненты структуры TTime. Эти операторы необходимо переделать для 
использования нового формата даты и времени. В больших программах, состоящих 
из тысяч строк, перспектива выслеживания каждого использования TTime приводит 
в уныние. Изменения в структуре данных вынуждают вас переделывать код, который 
уже был протестирован. Таким образом, потребуется повторная отладка и потеря 
драгоценного времени. Старое эмпирическое правило гласит: данные формируют 
код.  Конечно, в реальной жизни спецификации данных имеют тенденцию к 
изменению во время разработки программы, задавая лишнюю работу программистам. 
    В традиционном программировании внутреннее представление данных 
определяется на ранней стадии разработки, что ограничивает свободу внесения в 
него последующих изменений. В ООП форма представления данных может меняться, в 
дальнейшем оказывая ограниченные воздействия на код. Классы C++ могут 
запретить доступ к тонкостям внутреннего представления данных, и изменения 
представления данных не обязательно повлияют на каждое использование этой информации. 

    Введение в понятие класса 


           Класс 
    Функции-члены 
    Данные-члены 

                  Рис. 13.1. Инкапсуляция 
                                    данных и функций в классе 

    Рассмотрим возможное представление даты и времени в классе и его 
преимущества. Класс — это вид структуры, инкапсулирующей данные и функции в 
удобную упаковку (рис. 13.1). 
    Приведем предыдущую структуру TTime в виде класса с инкапсулированными 
функциями и данными: 

    class TTime	{ 
    public:			// Спецификатор доступа 
      int year ;		// Данные-член 
      int month ;		//             "             " 
      int day ;		//             "             "                                     
      int hour ;		//             "             "                                   
      int minute;		// 
      void Display(void) ;	// Функция-член 
    }; 
    Объявление класса очень похоже на объявление структуры TTime, исключая тот 
факт, что оно начинается с ключевого слова class. Опять же, по соглашению 
лишняя буква Т в имени класса напоминает вам, что ТТуре — тип данных. В 
скобках заключены шесть членов класса, которым предшествует слово public, и 
один из трех спецификаторов доступа, которые контролируют возможность 
использования членов класса в программе. Позже вы ознакомитесь с двумя другими 
спецификаторами доступа — private и protected. Спецификатор доступа public 
открывает доступ ко всем членам, следующим за ним, для всех пользователей 
класса, поэтому такие члены называются открытыми. 
    Данные-члены в классе в точности такие же, как и данные-члены в структуре. 
Данные-члены, такие как year, month и day, могут быть переменными, 
указателями, ссылками, массивами, структурами и т.п. Они могут быть также и 
объектами класса. Конечно, члены не могут использовать спецификаторы классов 
памяти auto, extern или register. 
    Функции-члены класса, такие, как Display() объявлены прототипами функций. 
Предположительно, функции-члены, подобные DisplayO в TTime, выполняют 
некоторые операции над данными-членами класса. Тело функции размещается в 
другом месте программы. 
    В листинге 13.1 используется класс TTime в программе на C++ и 
демонстрируется выполнение функции-члена. Скомпилируйте программу и запустите 
ее для отображения образца даты и времени. 

    Листинг 13.1.  CLASS.СРР (класс TTime) 

    1:	#include <iostream.h> 
    2:	#include <stdio.n> 
    3: 
    4:	class TTime { 
    5:	public: // Спецификатор доступа 
    6:	  int year; // Данные-члены 
    7:	  int month; // " " 
    8:	  int day; // " " 
    9: 	  int hour; // " " 
    10:	  int minute; // " " 
    11:	  void Display(void); // Функция-член 
    12:	}; 
    
    
    Глава 13. Программирование классов	307(194) 