Программирование >>  Структурное программирование 

1 ... 136 137 138 [ 139 ] 140 141 142 ... 342


FIG6 1.CPP

Создание структуры, задание и печать ее элементов. #include <iostream.h>

struct Time { определение структуры

int hour; 0-23

int minute; 0-59

int second; 0-59

void printMilitary(const Time &); прототип

void printStandard(const Time S); прототип

main()

Time dinnerTime; переменная нового типа Time

задание элементам правильных значения dinnerTime.hour = 18; dinnerTime.minute = 30; dinnerTime.second = 0;

cout Обед состоится в ;

printMilitary(dinnerTime);

cout no военному времени, endl

что соответствует ; printStandard(dinnerTime);

cout << no стандартному времени. << endl;

задание элементам неправильных значений dinnerTime.hour = 2 9; dinnerTime.minute = 73; dinnerTime.second = 103;

cout endl << Время с неправильными значениями: ; printMilitary (dinnerTime); cout << endl; return 0;

Рис. 6.1. Создание аруктуры, задание и печать ее элементов (чааь 1 из 2)

число секунд после полуночи), то все программы, которые используют struct, нужно будет изменить. Не существует никакого интерфейса , гарантирующего, что программист правильно использует тип данных и что данные являются непротиворечивыми.

Замечание по технике программирования 6.1

Важно писать программы, которые легко понимать и поддерживать. Изменения являются скорее правилом, чем исключением. Программисты должны предвидеть, что их коды будут изменяться. Как мы увидим, классы способствуют модифицируемости программ.



6.5. Использование абстрактного типа данных Time

с помощью класса

Классы предоставляют программисту возможность моделировать объекты, которые имеют атрибуты (представленные как данные-элементы) и варианты поведения или операции (представленные как функции-элементы). Типы, содержащие данные-элементы и функции-элементы, обычно определяются в С++ с помощью ключевого слова class.

Печать времени в военном формате void printMilitary(const Time St) {

cout (t.hour < 10 ? 0 : ) t.hour

: (t.minute < 10 ? 0 : ) t.minute : (t.second < 10 ? 0 : ) t.second;

Печать времени в стандартном формате void printStandard(const Time &t) {

cout ((t.hour == 0 I I t.hour == 12) ? 12 : t.hour %12) : (t.minute < 10 ? 0 : ) t.minute : (t.second < 10 ? 0 : ) t.second (t.hour < 12 ? AM : PM );

Обед состоится в 18:30:00 no военному времени, что соответствует 6:30:00 РМ по стандартному времени.

Время с неправильными значениями: 29:73:103

Рис. 6.1. Создание структуры, задание и печать ее элементов (часть 2 из 2)

Существуют и другие проблемы, связанные со структурами в стиле С. В С структуры не могут быть напечатаны как единое целое, только по одному элементу с соответствующим форматированием каждого. Для печати элементов структуры в каком-либо подходящем формате должна быть написана функция. Глава 8, Перегрузка операций покажет, как перегрузить операцию , чтобы предоставить возможность простой печати объектов типа структура (С-Н- расширяет понятие структуры) или типа класс. В С структуры нельзя сравнивать в целом; их нужно сравнивать элемент за элементом. Глава 8 покажет, как перегрузить операции проверки равенства и отношения, чтобы можно было в Си-Ь-1- сравнивать объекты типов структура и класс.

В следующем разделе мы вновь использует нашу структуру Time, но уже как класс, и продемонстрируем некоторые преимущества создания таких так называемых абстрактных типов данных, как классы. Мы увидим, что классы и структуры в С-Ы- можно использовать почти одинаково. Различие между ними состоит в доступности по умолчанию элементов каждого из этих типов. Это будет более детально объяснено позже.



Функции-элементы иногда в других объектно-ориентированных языках называют методами, они вызываются в ответ на сообщения, посылаемые объекту. Сообщение соответствует вызову функции-элемента.

Когда класс определен, имя класса может быть использовано для объявления объекта этого класса. Рис. 6,2 содержит простое определение класса Time.

Определение нашего класса Time начинается с ключевого слова class. Тело определения класса заключается в фигурные скобки ({ }). Определение класса заканчивается точкой с запятой. Определение нашего класса Time, как и нашей структуры Time, содержит три целых элемента hour, minute и second.

Типичная ошибка программирования 6.1

Забывается точка с запятой в конце определения класса (или структуры).

I class Time { I public: У Time();

void setTime(int, int, int); void printMilitary0; void printStandatd(); private:

int hour; 0-23 int minute; 0 -59 int second; 0-59

Рис. 6.2. Проаое определение Knaccaime

Остальные части определения класса - новые. Метки public: (открытая) и private: (закрытая ) называются спецификаторами доступа к элементам. Любые данные-элементы и функции-элементы, объявленные после спецификатора доступа к элементам public: (и до следующего спецификатора доступа к элементам), доступны при любом обращении программы к объекту класса Time. Любые данные-элементы и функции-элементы, объявленные после спецификатора доступа к элементам private: (и до следующего спецификатора доступа к элементам), доступны только функциям-элементам этого класса. Спецификаторы доступа к элементам всегда заканчиваются двоеточием (:) и могут появляться в определении класса много раз и в любом порядке. В дальнейшем в тексте нашей книги мы будем использовать записи спецификаторов доступа к элементам в виде public и private (без двоеточия).

Хороший стиль программирования 6.1

Используйте при определении класса каждый спецификатор доступа к элементам только один раз, что сделает программу более ясной и простой для чтения. Размещайте первыми элементы public, являющиеся общедоступными.

Определение класса в нашей программе содержит после спецификатора доступа к элементам public прототипы следующих четырех функций-элементов: Time, setTime, printMilitary и printStandard. Это - открытые функции-элементы или открытый интерфейс услуг класса. Эти функции будут



1 ... 136 137 138 [ 139 ] 140 141 142 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика