Основные отличия между описанием функции-члена и обычной функции.
· Имени функции-члена предшествует имя класса и оператор разрешения области видимости. Заголовок функции void TTime::Display(void) указывает компилятору, что Display() – член классаTTime. Поскольку имя класса однозначно отождествляет имя функции-члена, в программе м.б. другие функции и функции-члены класса с именем Display(), не вызывающие конфликтов имен. · Внутри функции-члена операторы имеют прямой доступ к членам класса. Например, в строках 32-33 непосредственно используются данные-члены класса TTime – month, year, hour и minute.
В основной программе класс Ttime используется так же, как и любой другой тип данных. Сначала в строке 16 объявляется appointment, как объект типа TTime. Объявления создает объект класса, так называемый экземпляр типа класса. Класс TTime – всего лишь шаблон, схема, описывающая формат членов класса. Вы должны создать объект типа класс, подобный appointment, для того, чтобы использовать класс. Далее в строках 18-22 присваивают значения данным-членам appointment, инициализируются дата и время. Затем в строке 24, вызывается функция-член Display(), отображающая дату и время, хранящиеся в appointment. Все эти строки используют оператор точки для доступа к членам объекта класса. Оператор точки следует использовать для ссылок на открытые данные-члены класса (которым предшествует спецификатор доступа public) аналогично ссылкам на члены структуры. Если таким членам является функции (см. строку 24), С++ вызывает функцию, которая обычно выполняет некоторые операции над данными-членами объекта класса. Например, в строке 24 вызывается функция Display() для отображения значения данных-членов appointment. В программе также могут быть другие объекты класса Ttime, объявленные следующим образом: TTime today; TTime yesterday; Этим объектам можно присвоить значения, и затем отобразить с помощью таких операторов: today.Display();//отображения значения объекта класса today yesterday.Display(); // отображения значения объекта класса yesterday
С++ позволяет структурам и объединениям иметь функции-члены, подобно классам. Действительно, если вы замените class на struct и удалите спецификатор доступа public, программа будет работать, как раньше. (Члены структура или объединения по умолчанию открыты для доступа). Конечно, на практике функции-члены очень редко используются в структурах и объединениях и обычно объявляются в классах.
В листинге 2.2 объявляется новая улучшенная версия класса TTime, которая использует функции-члены для доступа к данным-членам класса. Новый класс облегчает изменение структуры данных-членов класса, что позволяет выдержать сроки проекта. Листинг 2.2. CLASS.CPP (новая улучшенная версия класса TTime) 1: #include <iostream.h> 2: #include <stdio.h> 3: 4: class Ttime { //спецификатор доступа делает //закрытыми в классе данные-члены в //строках 6-10 5: private: 6: int year; 7: int month; 8: int day; 9: int hour; 10: int minute; 11: public: // открытые функции-члены 12: void Display(void); 13: void GetTime(int &m, int &d, int &y, int &hr, int &min); 14: void SetTime(int m, int d, int y, int hr, int min); 15: }; 16: 17: main() 18: { 19: Ttime ap; 20: int month, day, year, hour, minute; 21: 22: ap.SetTime(7,14, 1996, 8, 30); 23: cout<< “ap == ”; 24: ap.Display(); 25: ap.GetTime(month, day, year, hour, minute); 26: ap.SetTime(month, day, year, ++hour, minute); 27: cout<< “next hour == ”; 28: ap .Display(); 29: return 0; 30: } 31: 32: void Ttime::Display(void) 33: { 34: char s[32]; 35: sprintf(s,“Date:%02d/%02d/%04d Time: %02d:%02d\n”, 36: month, day, year, hour, minute); 37: cout<< s; 38: } 39: // передаются значения компонентов //объекта класса обратно, в аргументы //оператора вызова, путем использования // целочисленных ссылочных параметров 40: void Ttime::GetTime(int &m, int &d, int &y, int &hr, int &min) 41: { // Возвращение //данных-членов тому, кто вызвал функцию 42: m= month; 43: d=day; 44: y=year; 45: hr=hour; 46: min=minute; 47: } 48: // значения параметров присваиваются //данным-членам класса 49: void Ttime::SetTime(int m, int d, int y, int hr, int mint) 50: { // Присваивание аргументов данным-//членам 51: month=m; 52: day=d; 53: year=y; 54: hour=hr; 55: minute=min; 56: }
закрытые (private) члены класса доступны только членам этого класса и никому более, закрытые члены невидимы вне класса.
В классе могут присутствовать многочисленные открытые и закрытые секции, располагающиеся в произвольном порядке. Можно повторять спецификаторы доступа private и public в объявлении класса (строки 5 и 11) столько раз, сколько понадобится. Функции-члены также могут быть объявлены в закрытой части, но обычно они открыты. Для использования закрытых данных-членов TTime существует лишь один законный способ - вызов открытых функций-членов класса. Непосредственный результат инкапсуляции данных и функций в классе: при изменении представления данных требуется переписать лишь функции-члены класса. на рис. 2.2 стрелочками отмечены пути доступа к открытым и закрытым членам класса. Функции в классе имеют доступ друг другу, т.е. две функции класса могут вызывать одна другую.
Рис. 2.2. Классы ограничивают доступ к закрытым членам
В основной программе, поскольку данные-члены TTime закрыты в классе, больше невозможно присваивать значения непосредственно объекту класса. Например, оператор из CLASS1.CPP ap.month = 7; // ??? вызвал бы сообщение об ошибке при компиляции, т.к. month закрыт в классе TTime и поэтому может непосредственно использоваться только членами этого класса. В новой программе для присваивания значений объекту класса appointment потребуется вызвать функцию-член. Например, в строке 22 выполняется оператор, который устанавливает дату и время в appointment равными 14 июля 1996 года, 8:30: appointment.SetTime(7,14,1996,8,30); Аналогично, в строке 25 вызывается функция GetTime() для копирования значений данных-членов appointment в локальные переменные, объявленные в строке 20. Эти значения затем передается обратно SetTime() с увеличенным за 1 значением hour, что устанавливается в appointment следующий час.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|