Наследование классов (Лабораторная работа № 4)

Страницы работы

Фрагмент текста работы

МОиН РФ

Новосибирский Государственный Технический Университет

Кафедра ПМт

Лабораторная работа №4

По дисциплине: «Объектно-ориентированное программирование»

Тема: «Наследование классов»

Факультет: Пм

Группа: 46

Выполнил студент: Архипов Д.А.

Проверил: Еланцева И. Л.

Новосибирск

2005

Путем модификации программ, разработанных в лабораторных работах №1, 3, разработать программу, такую чтобы в ней были определены несколько классов, реализующих понятие геометрической фигуры в графической системе:

– абстрактный класс «Фигура», содержащий чисто виртуальные функции;

– класс «Закрашенный», позволяющий задать параметры закраски и осуществить закраску;

– класс «Фигура-контур» потомок класса «Фигура» (на основе класса, разработанного в лабораторной работе №2);

– класс «Закрашенная фигура» потомок класса «Фигура-контур», класс «Закрашенный» при этом использовать либо как второго родителя (множественное наследование), либо как часть класса «Закрашенная фигура» (агрегация);

 – класс «Комбинированная фигура», реализующий две вложенные фигуры, с закраской между ними.

Разработать функцию, демонстрирующую поведение разработанных классов.

Фигура: окружность.

  1. Алгоритм

Метод решения:

Построим иерархию классов следующим образом:

Описание классов:

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;//переопределение

  1. Тесты

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();                                           контуры двух прямоугольников                                                                                                                                                                          

  1. Текст программы

Описание классов:

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

Похожие материалы

Информация о работе