Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral


Задание 4

Организация программ с использованием виртуальных функций и абстрактных базовых классов

Цель задания

Изучение механизма динамического связывания. Получение навыков в использовании виртуальных функций. Изучение принципов построения абстрактных базовых классов и производных классов, созданных на основе базовых. Получение навыков в разработке абстрактных классов с применением чисто виртуальных функций, в построении производных классов с использованием открытого наследования.

Минимальное задание

Имеется первичный (основной) базовый класс A:

class A {

int i;

char c;

char v[10];

public:

A(int ni=0,char nc=’*’)

{cout<<endl<<"Конструктор класса A "; i=ni; c=nc;}

~A()

{cout<<endl<<"Деструктор класса A ";}  };

Реализуйте иерархии классов, представленные "деревьями".

A        B1        C

!  ! 

       

       B2        

A  virtual        B1        C

!  !  !

       

  virtual        B2        

Член-данное класса В1: вещественное двойной точности. Член-данные класса В2: вещественное. Член-данное класса С: длинное целое. Классы B1, B2, C должны содержать  соответствующие конструкторы и деструкторы аналогичные классу A. Напишите демонстрационную программу, которая поочередно создает объекты классов A, B1, B2, C и выдает их размеры в памяти. Объясните полученные результаты.

НЕ нашли? Не то? Что вы ищете?
Составить программу с использованием множественного наследования для изображения на экране дисплея прямоугольника, с текстом внутри, следующего содержания: "GRUPPA 417415". При составлении программы использовать иерархию классов:

        Point                 Rect                MR

  !  ! 

                Message        

  ! 

Класс Point должен быть виртуальным базовым классом. Для всех классов иерархии определите конструкторы и член-функции в целях перемещения, показа и стирания соответствующих объектов.

Класс Point должен содержать член-данные, характеризующие координаты и цвет точки. Класс Rect должен содержать член-данные, характеризующие координаты левого вернего и правого нижнего углов. Класс Message должен содержать член-данные, характеризующие тип шрифта и адрес сообщения в памяти. Класс MR может не содержать собственных член-данных.

Напишите программу создания базового класса num. В этом классе должно храниться целое и определена виртуальная функция shownum( ). Создайте два производных класса outhex и outoct, которые наследуют класс num. Функция shownum( ) должна быть переопределена в производных классах так, чтобы осуществлять вывод на экран значений, в шестнадцатеричной и восьмеричной системах счисления соответственно. Напишите программу, в которой базовый класс dist используется для хранения в переменной типа double расстояния между двумя точками. В классе dist создайте виртуальную функцию trav_time( ), которая выводит на экран время, необходимое для прохождения этого расстояния с учетом того, что расстояние задано в милях, а скорость равна 60 миль в час. В производном классе metricпереопределите функцию trav_time( ) так,  чтобы она выводила на экран время, необходимое для прохождения этого расстояния, считая теперь, что расстояние задано в километрах, а скорость равна 100 километров в час. Напишите программу создания базового класса area. В этом классе должны храниться две переменные типа double, определяющие размеры фигуры (например, высота и ширина), определена функция setar( ), задающая значения переменным, и определена виртуальная функция getar( ). Создайте два производных класса rectangle и triangle, которые наследуют класс area. Функция getar( ) должна быть переопределена в производных классах так, чтобы возвращать площадь фигуры, вид которой задается в производном классе. Создать иерархическую структуру классов “точка”, “четырехугольник”, “линия”, “окружность”, “полигон”. Определить для них следующие операции: прорисовки; перемещения с заданной скоростью в заданном направлении; вращения вокруг заданной точки; масштабирования.

Организовать движение этих фигур до нажатия клавиши.

Разработать программу, моделирующую поведение двух стай рыб, одна из которых является хищником для другой. Представители обеих стай могут “видеть” друг друга в заданном радиусе, изменять в определенных пределах скорость и направление движения. Для стай определены коэффициенты естественной смертности и рождаемости. “Хищники” могут преследовать и “поедать” “жертв”, если окажутся в непосредственной близости. Для визуализации модели воспользуйтесь классами, определенными в предыдущей задаче (“точка”, “четырехугольник”, “линия”, “окружность”, “полигон”). Создать иерархию классов для моделирования взаимодействия “Магазин-склад - Заказчик”. В распоряжении магазина имеется:
    Склад с товарами различных наименований, стоимости и веса; Гараж с машинами различной грузоподъемности, вместительности и потребляемой мощности.

В магазин поступают заказы на поставку определенного количества товаров различных наименований в заданный район (задается как расстояние между магазином и районом). Магазин должен выбрать наиболее подходящее транспортное средство (учитывать, что машины могут быть заняты другими заказчиками) и определить счет за поставку товара.

Создать иерархию классов следующих элементов интерфейса: “Окно”, “Кнопка”, ‘’Меню”, “Окно редактирования”, ‘Окно вывода текста или графики”, “Кнопка-перключатель”, “Кнопка-Активизатор”, “Радиокнопка”. С помощью созданных классов построить интерфейс к задаче о двух стаях рыб Создать иерархию классов и запрограммировать компьютерную игру “Морской бой”. Игровое поле разбивается на клетки. Палуба корабля занимает одну клетку. Кораблем считается совокупность смежных клеток. Допускаются четыре категории кораблей: одно-, двух-, трех - и четырехпалубные. Двух-, трех - и четырехпалубные корабли могут иметь всевозможные конфигурации и ориентации на игровом поле. Не допускается размещение кораблей в смежных клетках.
Пример выполнения задания

Постановка задачи

Для классов “Точка” и ”Окружность” определить виртуальную функцию Draw(  ) прорисовки объекта, функцию элементарного перемещения с заданной скоростью в заданном направлении.

Для объектов point и circ вызывается одна и та же функция базового класса Run( ), однако в ней для первого объекта вызывается функция Draw(int) базового класса, для второго – функция Draw(int) производного класса Circ

Структурная схема класса (представить в виде UML-диаграмм)

Член-данные



Базовый класс

Point ( )

Член-функции

координаты точки: x, y

цвет точки: color

скорость движения: v

направление движения: alpha

конструктор: Point ( )

  прорисовка объекта:  Draw( )

изменение координат со скоростью v: E1_move( )

перемещения с заданной скоростью в заданном направлении: Run( )

радиус окружности: rad

Производный класс

Circ( )

конструктор: Circ( )

прорисовка объекта:  Draw( )


Исходный текст программы

#iinclude <graphics. h >

class Point

{        int x, y  ;  //координаты

int color  ;  //цвет

float v  ;  //скорость

float alpha  ;  //направление движения

public :

Point (int _x,  int _y,  int _color,  float _v = 10,  float _alpha = M_PI/3 )  : x( _x),  y( _y),  color( _color),  v( _v),  alpha( _alpha)  {Draw(color)  ;}

virtual void Draw(int  col)  ;

void E1_move( )  ;

void Run( )  ;  }  ;

void Point : : Draw(int  col)

{  putpixel(x,  y,  col)  ;  }

void Point : : E1_move( )  //функция осуществляет элементарное изменение координат со скоростью v

{        x +=ceil(v * cos(alpha) )  ;

y +=ceil(v * sin(alpha) )  ;  }

void Point : : Run( )

{        do        

{        Draw( 0 )  ;

E1_Move( )  ;

Draw( color )  ;  }

  while( ! kbhit( ) )  ;  }

class Circ : public  Point

{        int rad  ;

public :

Circ (int _x,  int _y,  int _color,  float _v,  float _alpha,  int _rad ) :  Point( _x,  _y,  _color,  _v,  _alpha),  rad( _rad)  {Draw( _color)  ;}

void Draw(int  col)  ;  }  ;

void Circ : : Draw(int  col)

{        setcolor(col)  ;

circle(x,  y,  rad)  ;  }

int main( )

{        int gd = DETECT, gm  ;

initgraph(&gd,  &gm,  “c:\\borlandc\\bgi “ )  ;

Point point (20,  20,  1)  ;

Circ circ (200,  200,  4,  15,  M_PI/6)  ;

point. Run( )  ;

circ. Run( )  ;

closegraph( )  ;

retutn  0  ;}