|
Программирование >> Структурное программирование
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. Это - открытые функции-элементы или открытый интерфейс услуг класса. Эти функции будут
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |