Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Программа 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 (А)].

Базовая точка 1 2 3 4 5
1     Р(3,1)    
2          

Прямоугольник – это четырехсторонняя фигура, чьи смежные стороны встречаются в прямых углах. Для рисования прямоугольник определяется двумя точками, которые отмечают верхний левый угол (ul) и нижний правый угол (lr) рамки.



 

(А) Отрезок L(p1, р2)    (В) Прямоугольник R(ul, Ir)

 

Класс Point   Класс Line   Класс Rectangle
private: х у координаты   private: Point p1, p2   private: Point ul, Ir
public: Конструктор, Draw, GetX, GetY     public Конструктор, Draw     public: Конструктор, Draw

Мы используем эти факты для создания классов 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.023 с.)
Главная | Случайная страница | Обратная связь