Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программа 1. Конструкция и использование класса Circle
Программа 1.1 реализует приложение для бассейна. Для оказания помощи в чтении кода C++ в тексте имеются комментарии. Объявление класса Circle показывает представление Circle ADT и использование закрытых и открытых директив для контроля за доступом к членам класса. Главная программа запрашивает клиента ввести радиус бассейна. Это значение используется для объявления объекта Pool. Второй объект – PoolRim объявляется как имеющий дополнительные три фута к его радиусу для размещения дорожки вокруг бассейна. Стоимость строительства ограды и стоимость бетонирования дорожки выводятся для печати. Вне главного модуля программа определяет класс Circle. Читатель может обратить внимание на использование спецификатора const для указания на то, что функция-член не изменяет данные. Этот спецификатор используется с методами Circumference и Area в их объявлении и определении. Стоимость строительных материалов для сетки ограды и стоимость бетона задаются как константы. // рг01_01.срр #tfinclude <iostream.h> const float PI = 3.14152; const float FencePrice = 3.50; const float ConcretePrice= 0.50; // Объявление класса Circle, данных и методов class Circle { private: // член класса radius - число с плавающей запятой float radius; public: // конструктор Circle (float r); // вычисляющие функции float Circumference (void) const; float Area (void) const; }; // class implementation // конструктор инициализирует член класса radius Circle::Circle (float r): radius (r) { } // возвратить длину окружности float Circle:: Circumference (void) const { return 2*PI*radius; } // возвратить площадь круга float Circle::Area (void) const { return PI*radius*radius; } void main ( ) { float radius; float FenceCost, ConcreteCost; // настраивает поток вывода на выдачу двух знаков // после десятичной точки cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2) ; // запрос на ввод радиуса cout << "Введите радиус бассейна:''; cin >> radius; // объявить объекты Circle Circle Pool (radius); Circle PoolRim(radius+3) ; // вычислить стоимость ограды и выдать ее значение FenceCost=PoolRim.Circumference()*FencePrice; cout << "Стоимость ограды: $" << FenceCost << endl; // вычислить стоимость бетона и выдать ее значение ConcreteCost=(PoolRim.Area()-Pool.Area())*ConcretePrice; cout << "Стоимость бетона: $" << ConcreteCost << endl; /* Запуск программы pr01_01 . cpp Введите радиус бассейна: 40 Стоимость ограды: $945.60 Стоимость бетона: $391.12 */
Разработка объектов В этой книге разрабатываются структуры данных с классами и объектами. Мы начинаем с классов, которые определяются простыми данными-членами и операциями класса. Для более сложных структур классы могут содержать члены класса, которые сами являются объектами. Результирующие классы, созданные посредством композиции (composition), имеют доступ к функциям-членам в составляющих объектах. Использование композиции объектов расширяет понятия инкапсуляции и скрытия информации и обеспечивает повторное использование кода. Объектно-ориентированные языки также позволяют классу быть порожденным из других классов путем наследования (inheritance). Это дает возможность разработчику создавать новые классы как усовершенствования других классов и повторно использовать код, который был разработан ранее. Наследование является фундаментальным средством объектно-ориентированного программирования на языке C++. Эта тема вводится формально в главе 12 и используется для разработки и реализации улучшенных структур данных. Объекты и композиция Геометрические фигуры состоят из наборов точек, которые образуют линии, прямоугольники и т.д. Основными строительными блоками фигур являются точки, сочетающиеся с серией аксиом для определения геометрических объектов. В данном разделе мы рассматриваем точку как примитивный геометрический объект, а затем описываем линии и прямоугольники. Эти геометрические фигуры используются для иллюстрации объектов и композиции. Точка – это местоположение на плоской поверхности. Мы предполагаем, что объект точка расположена на сетке с координатами, которые измеряют горизонтальное (х) и вертикальное (у) расстояние от базовой точки. Например, точка р (3,1) находится на 3 единицы измерения правее и 1 единицу ниже базовой точки. Линия образуется из точек, а две точки определяют линию. Последний факт используется для создания модели отрезка (line segment), который определяется своими конечными точками р! и р2 [Рис. 1.1 (А)].
Прямоугольник – это четырехсторонняя фигура, чьи смежные стороны встречаются в прямых углах. Для рисования прямоугольник определяется двумя точками, которые отмечают верхний левый угол (ul) и нижний правый угол (lr) рамки.
(А) Отрезок L(p1, р2) (В) Прямоугольник R(ul, Ir)
Мы используем эти факты для создания классов Point, Line и Rectangle. Члены в классах Line и Rectangle являются объектами типа Point. Композиция – это важный инструмент в создании классов с объектами из других классов. Заметьте, что каждый класс имеет метод Draw для отображения рисунка на поверхности рисования. Класс Point содержит функции-члены для доступа к координатам х и у точки. Пример 3 Определите геометрический объект, задавая фигуру, за которой следуют имя объекта и параметры для указания объекта.
1) Point Р (1,3 ); // объявляет объект point (1,3) 2) Point pl(4,2), р2(5,1); Line 1(р1,р2); // линия: от (4,2) до (5,1) 3) Point pl(4,3), р2(6,4); Rectangle r(pl,p2); // прямоугольник: от (4,3) до р2(6,4) 4) Метод Draw в каждом классе делает наброски рисунка на поверхности рисования. р.Draw(); l.Draw(); г.Draw(); C ++ геометрические классы Далее следуют объявления C++ для классов Point и Line. Заметьте, что конструктору для класса Line передаются координаты двух точек, определяющих линию. Каждый класс имеет функцию-член Draw, отображающую рисунок в области рисования. Спецификация класса Point ОБЪЯВЛЕНИЕ class Point private: float x, у; public: // горизонтальная и вертикальная позиция Point (float h, float v) ; float GetX(void) const; // возвратить координату х float GetY(void) const; // возвратить координату у void Draw(void) const; // нарисовать точку (х,у) Класс посредством композиции Line включает два объекта Point. Эти объекты инициализируются конструктором. Спецификация класса Line ОБЪЯВЛЕНИЕ class Line { private: Point PI, P2; // две конечные точки отрезка public: Line (Point a, Point b);// инициализировать P1 и Р2 void Draw(void) const; // нарисовать отрезок }; Объекты и наследование Наследование – это интуитивное понятие, из которого мы можем извлекать примеры, основанные на каждодневном опыте. Все из нас наследуют характерные черты от своих родителей такие, как раса, цвет глаз и тип крови. Мы можем думать о родителе как о базе, из которой мы наследуем характерные черты. Взаимосвязь иллюстрируется двумя объектами, связанными стрелкой, острие которой направлено к базовому объекту. Зоология формально изучает наследование у животных. На рис. 1.2 показана иерархия животных для млекопитающих, собак и колли. Млекопитающее – это теплокровное животное, которое имеет шерсть и вскармливает своих детенышей молоком. Собака – это млекопитающие, которое имеет клыки, ест мясо, имеет определенное строение скелета и является общественным животным. Колли – это собака с заостренной мордой, имеющая белый с рыжим окрас и хорошо развитые пастушеские инстинкты. В иерархической цепочке класс наследует все характерные черты своего класса-предка. Например, собака имеет все черты млекопитающего плюс те, которые отличают ее от кошек, слонов и т.д. Порядок расположения классов указывает что Колли есть собака. Собака есть млекопитающее
Рис. 1.2. Цепочка наследования у животных В этой цепочке класс млекопитающих определяется в качестве базового класса (base class) для собаки, а собака называется производным классом (derived class). Используя аналогию семейного наследования, мы говорим о базовом и производном классах как о родительском классе и класее-наследнике, соответственно. В случае расширенной цепочки наследник наследует характерные черты своего родительского и прародительского класса. |
Последнее изменение этой страницы: 2019-06-19; Просмотров: 163; Нарушение авторского права страницы