Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++ ShapesDetector помогите решить задачу

Артём Калайда Ученик (166), закрыт 11 месяцев назад
ShapesDetector
В этой задаче вам предстоит определять динамический тип объектов
А именно, есть иерархия классов
class Shape {
public:
virtual double area() = 0;
};
class Ellipse : public Shape { // Овал
public:
double area() override;
};
class Circle : public Ellipse { // Круг
public:
double area() override;
};
class Rectangle : public Shape { // Прямоугольник
public:
double area() override;
};
class Square : public Rectangle { // Квадрат
public:
double area() override;
};
Ваша задача написать функции
bool IsCircle(const Shape& shape);
bool IsEllipse(const Shape& shape);
bool IsSquare(const Shape& shape);
bool IsRectangle(const Shape& shape);
1. IsCircle возвращает true, если лежайщий под shape объект является Circle. false --
иначе
2. IsEllipse возвращает true, если лежайщий под shape объект является Ellipse. false --
иначе
3. IsSquare возвращает true, если лежайщий под shape объект является Square. false --
иначе
4. IsRectangle возвращает true, если лежайщий под shape объект является Rectangle. false
-- иначе
А именно, вызов IsRectangle(Square()) должен вернуть false, и только вызов
IsRectangle(Rectangle()) вернет true.
В систему отправляйте лишь код функций и необходимые библиотеки, всё остальное будет
подключено автоматически
Указание: подумайте, как можно применить dynamic_cast
Лучший ответ
Сергей Гений (56459) 12 месяцев назад
Хрен знает как тут использовать dynamic cast, учитывая что происходит множественное наследование. А вот typeid можно.

 #include 

bool IsCircle(const Shape& shape)
{
return typeid(shape) == typeid(Circle);
};
bool IsEllipse(const Shape& shape)
{
return typeid(shape) == typeid(Ellipse);
};
bool IsSquare(const Shape& shape)
{
return typeid(shape) == typeid(Square);
};
bool IsRectangle(const Shape& shape)
{
return typeid(shape) == typeid(Rectangle);
};
ПапаВысший разум (122305) 12 месяцев назад
В упор не вижу тут множественного наследования.
 Shape -> Ellipse -> Circle
Shape -> Rectange -> Square
Типовое дерево наследования из типового примера по C++, призванного промыть мозги неофитам, будто любую предметную область можно описать в виде иерархии классов. Потом они с горящими глазами приходят устраиваться на работу, и ... в общем, как раньше при обучении игре на фортепиано препод пользовался линейкой, такой же обычай и сейчас надо вводить для воспитания джунов.
Сергей Гений (56459) Папа, Я хрен его знаю как называется наследование от одного родителя двух и более классов поэтому написал множественное ) Динмик каст от шейп даст бэд каст. Получается нужно проверять два раза от элипса и от ректангла.
Остальные ответы
Похожие вопросы