Показать сообщение отдельно
Старый 15.01.2018, 15:34   #2 (permalink)
Olej
Member
 
Аватар для Olej
 
Регистрация: 10.01.2018
Сообщений: 36
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Anton1990 Посмотреть сообщение
Создать абстрактный класс Figure. На его основе реализовать классы Rectangle (прямоугольник), Circle (круг) и Trapezium (трапеция) с возможностью вычисления площади, центра тяжести и периметра.
Код:
class figure : protected complex<double> {      // абстрактный класс произвольной фигуры
protected:                                      // центр в точке: [real,imag]
   double r;                                    // масштаб (радиус описанной окружности)
public:
   figure( double radius ) : complex<double>( 0.0, 0.0 ), r( radius ) {}
   figure& move( double x, double y ) {
      *(complex<double>*)this = complex<double>( x, y );
      return *this;
   }
   friend inline ostream& operator << ( ostream& stream, figure& obj ) {
      return stream << "фигура " << obj.title()
             << " [" <<  obj.real() << "," << obj.imag()
             << "]: площадь=" << obj.area() << ", периметр=" << obj.perimeter();
   };
   virtual const char *title( void ) const = 0; // 3 чистые (пустые) виртуальные функции
   virtual double area( void ) = 0;
   virtual double perimeter( void ) = 0;
};
Код:
class circle : public figure {                  // класс всех окружностей
public:
   circle( double r = 1. ) : figure( r ) {};
   const char *title( void ) const { return "круг"; };
   virtual double area( void ) { return M_PI * r * r; };
   virtual double perimeter( void ) { return 2. * M_PI * r; };
};
Вот где-то так... А всё остальное - по аналогии, просто.
Olej вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070