Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 05.07.2017
Сообщений: 45
1

Создать абстрактный базовый класс "Фигура" с виртуальной функцией: "Площадь"

24.01.2018, 07:03. Показов 3656. Ответов 1
Метки нет (Все метки)

Создать абстрактный базовый класс фигура с виртуальной функцией — площадь. Создать производные классы: прямоугольник, круг, прямоугольный треугольник, трапеция, ромб, параллелограмм со своими функциями площади. Для провер¬ки определить массив ссылок на
абстрактный класс, которым присваиваются адреса различных объектов.
Посчитать площадь для каждого объекта в массиве, используя вызов виртуальной ф-ии.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2018, 07:03
Ответы с готовыми решениями:

Абстрактный базовый класс "звонок" с виртуальной функцией "стоимость"
Помогите пожалуйста очень надо (классы это не мое) полиморфизм Поступающие звонки оператор...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...

Создать класс "Стакан" с виртуальной функцией "Объем"
Создать класс с виртуальной функцией - Объем стаканов (3). Реализовать в программе вывод...

Создать базовый класс "Животные" и производные классы "кошки" и "собаки"
Создать базовый класс "Животные". Создать производные классы кошки и собаки. Поля класса с уровнем...

1
6022 / 2141 / 748
Регистрация: 10.12.2010
Сообщений: 5,988
Записей в блоге: 3
06.02.2018, 14:27 2
Лучший ответ Сообщение было отмечено Lawr443362777 как решение

Решение

Сделал чуть по-другому, но если надо, то сможете по образцу переделать. Сделаны круг, прямоугольник, параллелограмм. Джава-стайл для скорости написания.
C++
1
2
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef _FIGURES_H_
#define _FIGURES_H_
 
#include <cmath>
 
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
 
class AbstractFigure
{
  protected:
    double area;
    double perimeter;
    
    virtual void recalculateProperties() = 0;
    
  public:
    double getArea() {return area;}
    double getPerimeter() {return perimeter;}
    
    virtual ~AbstractFigure(){}
};
 
class Circle: public AbstractFigure
{
  private:
    double r;
    
  public:
    Circle(const double r)
    {
      this->r = r;
      recalculateProperties();
    }
    
    double getR() {return r;}
    void setR(const double r) 
    {
      this->r = r;
      recalculateProperties();
    }
 
  protected:
    virtual void recalculateProperties()
    {
      area = M_PI * r * r;
      perimeter = 2.0 * M_PI * r;
    }
};
 
class Rectangle: public AbstractFigure
{
  private:
    double a;
    double b;
    
  public:
    Rectangle(const double a, const double b)
    {
      this->a = a;
      this->b = b;
      recalculateProperties();
    }
    
    double getA() {return a;}
    double getB() {return b;}
    void setA(const double a) 
    {
      this->a = a;
      recalculateProperties();
    }
    
    void setB(const double b) 
    {
      this->b = b;
      recalculateProperties();
    }
    
  protected:
    virtual void recalculateProperties()
    {
      area = a * b;
      perimeter = 2.0 * (a + b);
    }
};
 
class Parallelogram: public AbstractFigure
{
  private:
    double a;
    double b;
    double alpha;
    
  public:
    Parallelogram(const double a, const double b, const double alpha)
    {
      this->a = a;
      this->b = b;
      this->alpha = alpha;
      recalculateProperties();
    }
    
    double getA() {return a;}
    double getB() {return b;}
    double getAlpha() {return alpha;}
    void setA(const double a)
    {
      this->a = a;
      recalculateProperties();
    }
    
    void setB(const double b)
    {
      this->b = b;
      recalculateProperties();
    }
    
    void setAlpha(const double alpha)
    {
      this->alpha = alpha;
      recalculateProperties();
    }
    
  protected:
    virtual void recalculateProperties()
    {
      perimeter = 2.0 * (a + b);
      area = a * b * sin(alpha);
    }
};
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <vector>
#include <memory>
#include <typeinfo>
 
#include "Figures.h"
 
int main()
{
  std::vector<std::unique_ptr<AbstractFigure>> v;
  
  v.push_back(std::make_unique<Circle>(4.0));
  v.push_back(std::make_unique<Rectangle>(2.0, 3.0));
  v.push_back(std::make_unique<Parallelogram>(4.32, 11.71, 40.5));
  
  int i = 0;
  for (auto& figure : v)
  {
    std::cout << "Item " << ++i << " is " << typeid(*figure).name()
      << " , P = " << figure->getPerimeter() << ", S = " << figure->getArea()
      << std::endl;
  }
  
  return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2018, 14:27

Базовый класс "Изделие" и производные классы "Мышь", "Клавиатура", "Монитор"
/*Создать класс изделие, с полями себестоимость, цена, время выполнения, стоимость нормочаса и...

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор"
Дали задачу по программированию: составить класс &quot;Источник напряжения&quot;, для которого нужно...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.