ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн
Наследование и графика
В программе CIRCLES главы 6 «Объекты и классы» мы видели программу, в кото- рой класс был создан для вывода на экран кругов. Конечно, кроме кругов суще- ствует еще множество других фигур: квадраты, треугольники. Слово «фигура» является обобщением, не затрагивающим определенный тип. Используем это при создании программы более сложной, но более понятной, чем программа, ко- торая рисует различные фигуры, не используя их общих характеристик.
В частности, мы создадим класс shape как базовый класс и три производных класса: circle, rect (для прямоугольников) и tria (для треугольников). Как и в дру- гих программах, мы используем здесь функции консольной графики. Обратитесь к приложению Д «Упрощенный вариант консольной графики», приложению В «Microsoft Visual C++» или приложению Г «Borland C++ Builder», чтобы по- нять, как встроить графические файлы в программу в вашем компиляторе. При- ведем листинг программы MULTSHAP:
// multshap.cpp
// геометрические фигуры
#include <msoftcon.h>
///////////////////////////////////////////////////////////
class shape // базовый класс
{
protected:
int xCo, yCo; // координаты фигуры
color fillcolor; // цвет
fstyle fillstyle; // стиль изображения
public:
// конструктор без аргументов
shape ( ) : xCo ( 0 ), yCo ( 0 ), fillcolor ( cWHITE ), fillstyle ( SOLID_FILL )
{ }
// конструктор с пятью аргументами
shape ( int x, int y, color fc, fstyle fs ) : xCo ( x ), yCo ( y ), fillcolor ( fc ), fillstyle ( fs )
{ }
// функция установки цвета и стиля
void draw ( ) const
{
set_color ( fillcolor );
set_fill_style ( fillstyle );
}
};
///////////////////////////////////////////////////////////
class circle : public shape
{
private:
int radius; // радиус, а xCo и yCo будут координатами центра
public:
// конструктор без параметров
circle ( ) : shape ( )
{ }
// конструктор с пятью параметрами
circle ( int x, int y, int r, color fc, fstyle fs ) : shape ( x, y, fc, fs ), radius ( r )
{ }
void draw ( ) const // функция рисования окружности
{
shape::draw ( );
draw_circle ( xCo, yCo, radius );
}
};
///////////////////////////////////////////////////////////
class rect : public shape
{
private:
int width, height; // ширина и высота, а xCo и yCo будут координатами верхнего правого угла
public:
// конструктор без параметров
rect ( ) : shape ( ), height ( 0 ), width ( 0 )
{ }
// конструктор с шестью параметрами
rect ( int x, int y, int h, int w, color fc, fstyle fs ) : shape ( x, y, fc, fs ), height ( h ), width ( w )
{ }
void draw ( ) const// функция рисования прямоугольника
{
shape::draw ( );
draw_rectangle ( xCo, yCo, xCo + width, yCo + height );
// нарисуем диагональ
set_color ( xWHITE );
draw_line ( xCo, yCo, xCo + width, yCo + height );
}
};
///////////////////////////////////////////////////////////
class tria : public shape
{
private:
int height; // высота пирамиды, а xCo и yCo будут координатами вершины
public:
// конструктор без параметров
tria ( ) : shape ( ), height ( 0 )
{ }
// конструктор с пятью параметрами
tria ( int x, int y, int h, color fc, fstyle fs ) : shape ( x, y, fc, fs ), height ( h )
{ }
// функция рисования пирамиды
void draw ( ) const
{
shape::draw ( );
draw_pyramid( xCo, yCo, height );
}
};
///////////////////////////////////////////////////////////
int main ( )
{
init_graphics ( ); // инициализируем систему отображения графики
circle cir ( 40, 12, 5, cBLUE, X_FILL ); // создаем круг
rect rec ( 12, 7, 10, 15, cRED, SOLID_FILL ); // создаем прямоугольник
tria tri ( 60, 7, 11, cGREEN, MEDIUM_FILL ); // создаем пирамиду
// рисуем все наши фигуры
cir.draw ( );
rec.draw ( );
tri.draw ( );
set_cursor_pos( 1, 25 ); // переводим курсор в самый низ экрана
return 0;
}
Эта программа рисует три различных фигуры: голубой круг, красный прямо- угольник и зеленый треугольник. Результат работы программы MULTSHAP пока- зан на рис. 9.6.
Общие характеристики всех фигур, такие, как их расположение, цвет, стиль заполнения, размещены в классе shape. Отдельные фигуры имеют более опреде- ленные атрибуты. Например, круг имеет радиус, а прямоугольник имеет шири- ну и высоту. Метод draw() класса shape содержит в себе действия, определенные для каждой из фигур: устанавливает их цвет и стиль заполнения. Перегрузка метода draw() в классах circle, rect и tria отвечает за прорисовку характерной для каждой фигуры формы.
Рис. 9.6. Результат работы программы MULTSHAP
Базовый класс shape является примером абстрактного класса, в котором не приписывается значение объекту класса. Вопрос, какой формы будет нарисован объект класса shape, не имеет смысла. Мы можем вывести на экран только оп- ределенную форму. Класс shape существует только как хранилище атрибутов и действий, общих для всех фигур.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
Схожі підручники
- Самостiйна робота з курсу - Системи промислових технологій в галузях економіки
- РЕГІОНАЛЬНА ЕКОНОМІКА. Тексти лекцій онлайн (частина 3)
- Бухгалтерський фінансовий облік (частина 1)
- ІНДИВІДУАЛЬНА РОБОТА №2 з Регіональної економіки
- Трансформаційні процеси в господарському комплексі України та їхні регіональні особливості
- Банківська Система основні теми