Цитата:
Сообщение от 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; };
};
Вот где-то так... А всё остальное - по аналогии, просто.