Untitled
unknown
c_cpp
a year ago
3.6 kB
1
Indexable
Never
//============================================================================ // Name : ex_inherit_cpp.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <cmath> #include <typeinfo> using namespace std; // пользователь вводит количество объектов, создать массив указателей на базовый класс // используя элемент массива (указатель) создать объект прооизводного класса, спросив у пользователя какой именно // ввести значения полей каждого объекта // вывести в цикле площади всех объектов class Shape { public: virtual double Area() const = 0; // чисто виртуальные методы virtual double Perimeter() const = 0; virtual ~Shape() { } }; class Rectangle: public Shape { private: double a, b; public: Rectangle( const double a = 0, const double b = 0 ) : a( a ), b( b ) { } double Area() const { return a * b; } double Perimeter() const { return 2 * ( a + b ); } double getA() const { return a; } void setA( double a ) { this->a = a; } double getB() const { return b; } void setB( double b ) { this->b = b; } }; class Triangle: public Shape { private: double a, h; public: Triangle( const double a = 0, const double h = 0 ) : a( a ), h( h ) { } double Area() const { return ( a * h ) / 2; } double Perimeter() const { return 2 * ( sqrt( a * a - h * h ) + 2 * a ); } double getA() const { return a; } void setA( double a ) { this->a = a; } double getH() const { return h; } void setH( double h ) { this->h = h; } }; class Circle: public Shape { private: double r; public: Circle( const double r = 0 ) : r( r ) { } double Area() const { return M_PI * r * r; } double Perimeter() const { return 2 * M_PI * r; } double getR() const { return r; } void setR( double r ) { this->r = r; } }; int main() { /*Rectangle r(3, 4); // = { 3, 4 }; cout << r.Area() << endl; Shape* sh = &r; cout << sh->Perimeter() << endl;*/ int n; cout << "Введите количество объектов: " << endl; cin >> n; Shape **sh = new Shape*[ n ]; double a, b, h, r; for ( int i = 0; i < n; ++i ) { int curr = 0; while ( curr < 1 || curr > 3 ) { cout << "\nВведите " << i + 1 << " объект который хотите добавить:" << endl; cout << "1 - прямоугольник:" << endl; cout << "2 - треугольник:" << endl; cout << "3 - окружность:" << endl; cin >> curr; } if ( curr == 1 ) { sh[ i ] = new Rectangle(); cout << "Введите две стороны прямоугольника: "; cin >> a >> b; Rectangle r( a, b ); } else if ( curr == 2 ) { sh[ i ] = new Triangle; cout << "Введите основание и высоту треугольника: "; cin >> a >> h; Triangle t( a, h ); } else { sh[ i ] = new Circle; cout << "Введите радиус окружности: "; cin >> r; Circle c( r ); } } cout << endl; for ( int i = 0; i < n; ++i ) cout << "Площадь " << i + 1 << " фигуры = " << ( *sh[ i ] ).Area() << endl; delete[] sh; return 0; }