Repository navigation
Expand file tree
/
Copy path3_1.cpp
More file actions
125 lines (116 loc) · 2.4 KB
/
Copy path3_1.cpp
File metadata and controls
125 lines (116 loc) · 2.4 KB
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
#include <iostream>
#include <typeinfo>
using namespace std;
class Shape
{
public:
virtual double getPerimeter() = 0;
virtual double getSquare() = 0;
virtual double getVolume() = 0;
virtual void getInf() = 0;
virtual ~Shape() {}
};
class Parallelepiped : public Shape
{
double x;
double y;
double z;
public:
Parallelepiped(double length = 0, double hight = 0, double width = 0)
{
x = length;
y = hight;
z = width;
};
double getPerimeter() override
{
return 4 * (x + y + z);
};
double getSquare() override
{
return 2 * (x * y + x * z + y * z);
};
double getVolume() override
{
return x * y * z;
};
void getInf()
{
cout << "length=" << x << ", hight=" << y << ", width=" << z;
}
~Parallelepiped() {}
};
class Ball : public Shape
{
double rad;
public:
Ball(double r = 0) : rad(r){};
double getPerimeter() override
{
return 0;
};
double getSquare() override
{
return 4 * 3.14159 * rad * rad;
};
double getVolume() override
{
return 4. / 3 * 3.14159 * rad * rad * rad;
};
void getInf()
{
cout << "rad=" << rad;
};
~Ball() {}
};
class mass_of_shapes
{
int len_mass;
Shape **mass;
typedef Shape *pointer;
public:
mass_of_shapes()
{
len_mass = 0;
mass = new pointer[10];
};
template <class T>
void push(const T &p)
{
mass[len_mass++] = new T(p);
}
void print_inf_of_shapes()
{
for (int i = 0; i < len_mass; i++)
{
cout << "Class name: " << typeid(*mass[i]).name() << "class inf: ";
mass[i]->getInf();
cout << " P:" << mass[i]->getPerimeter() << " S:"
<< mass[i]->getSquare() << " V:" << mass[i]->getVolume() << endl;
}
}
~mass_of_shapes()
{
for (int i = 0; i < len_mass; i++)
delete mass[i];
delete[] mass;
}
};
int main()
{
Parallelepiped p1(3, 4, 5);
Parallelepiped p2(1, 4, 6);
Parallelepiped p3(6, 3, 5);
Ball b1(1.2);
Ball b2(13.5);
Ball b3(6);
mass_of_shapes mas;
mas.push<Parallelepiped>(p1);
mas.push<Parallelepiped>(p2);
mas.push<Parallelepiped>(p3);
mas.push<Ball>(b1);
mas.push<Ball>(b2);
mas.push<Ball>(b3);
mas.print_inf_of_shapes();
return 0;
}