МОиН РФ
Новосибирский Государственный Технический Университет
Кафедра ПМт
Лабораторная работа №4
По дисциплине: «Объектно-ориентированное программирование»
Тема: «Наследование классов»
Факультет: Пм
Группа: 46
Выполнил студент: Архипов Д.А.
Проверил: Еланцева И. Л.
Новосибирск
2005
Путем модификации программ, разработанных в лабораторных работах №1, 3, разработать программу, такую чтобы в ней были определены несколько классов, реализующих понятие геометрической фигуры в графической системе:
– абстрактный класс «Фигура», содержащий чисто виртуальные функции;
– класс «Закрашенный», позволяющий задать параметры закраски и осуществить закраску;
– класс «Фигура-контур» потомок класса «Фигура» (на основе класса, разработанного в лабораторной работе №2);
– класс «Закрашенная фигура» потомок класса «Фигура-контур», класс «Закрашенный» при этом использовать либо как второго родителя (множественное наследование), либо как часть класса «Закрашенная фигура» (агрегация);
– класс «Комбинированная фигура», реализующий две вложенные фигуры, с закраской между ними.
Разработать функцию, демонстрирующую поведение разработанных классов.
Фигура: окружность.
Метод решения:
Построим иерархию классов следующим образом:
Описание классов:
Class Shape абстрактный класс содержащий виртуальные функции:
virtual void print() const = 0;//печать координат…
virtual void printShapeName() const = 0;//название фигуры…
virtual int area() const { return 0;}//считаем площадь…
class Restangle конкретный класс производный от Shape содержащий функции:
public:
//prototipy procedure correct
Restangle();//конструктор класса
virtual void printShapeName() const {printf("Conter for first Restangle");}//переопределение
void print() const;//переопределение
void draw_poly()const;//рисует контур
void set_param() ;//ввод координат
void cheinge_location(int,int) ;//изменение места
int is_correct();//проверка
virtual int area() const;//переопределение
class Filled конкретный класс содержащий функции:
public:
Filled();//конструктор
virtual void printShapeName() const { printf("Filling restangle...\n");}//переопределение
void _fill_figure(int[8])const;//закраска контура
void setGraghParam()const ;//ввод графических параметров
class Fill_Shape : public Filled , public Restangle конкретный класс содержащий функции:
Fill_Shape();//конструктор
void draw_fill_figure( );//рисование закрашенного контура
virtual void printShapeName() const { printf("the filled shape!!!\n");} //переопределение
class combain: public Fill_Shape конкретный класс содержащий функции:
combain();//конструктор
virtual void printShapeName() const{ printf("Combainig...\n");}//переопределение
void set_param();//переопределение
//переопределение _fill_figure
void _fill_figure(int pixels[8] )const{ Filled::_fill_figure(pixels);
setfillstyle(back_type, back_color);
fillpoly(quant,advanced_pixels);
}
//переопределение setGraghParam()
void setGraghParam()const
{
Filled::setGraghParam();
printf("\nInput the back type and back color:");
scanf("%d %d",&back_type,&back_color);
}
//переопределение draw_poly
void draw_poly()const{ Restangle::draw_poly();
setlinestyle(back_type, 0, 0);
setcolor(15);
drawpoly(quant, advanced_pixels);
line(advanced_pixels[0], advanced_pixels[1], advanced_pixels[quant*2-2], advanced_pixels[quant*2-1]);
}
void cheinge_location(int,int) ;//переопределение
int is_correct_second();//проверка
void draw_few_figures();//рисование двух закрашенных фигур
void print() const;//переопределение
Fill_Shape fillShapeWork;
Filled f_work;
combain c_work = combain();
Действие Вывод
work.printShapeName(); Conter for first Restangle
f_work.printShapeName(); Filling restangle...
c_work.printShapeName() Combainig...
fillShapeWork.printShapeName(); the filled shape!!!
work.draw_poly(); контур одного прямоугольника
c_work.draw_poly(); контуры двух прямоугольников
Описание классов:
class Shape{
public:
virtual void print() const = 0;
virtual void printShapeName() const = 0;
virtual int area() const { return 0;}
};
class Filled{
public:
Filled();
virtual void printShapeName() const { printf("Filling restangle...\n");}
void _fill_figure(int[8])const;
void setGraghParam()const ;
protected:
int fill_type;
int fill_color;
int color;
};
Filled::Filled()
{fill_type = 1;
fill_color = 5;
}
void Filled::_fill_figure(int pixels[8])const
{
setfillstyle(fill_type, fill_color);
fillpoly(quant,pixels);
}
void Filled::setGraghParam() const
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.