Вступить в клуб →
лёгкаявопросООП, исключения и дизайн классов

Все фигуры в векторе считают площадь как базовый класс

struct Shape {
    virtual ~Shape() = default;
    virtual double area() const { return 0; }
};

struct Circle : Shape {
    explicit Circle(double r) : r(r) {}
    double area() const override { return 3.14159 * r * r; }
    double r;
};

std::vector<Shape> shapes;
shapes.push_back(Circle(2.0));
std::cout << shapes[0].area();   // 0

Почему вызывается Shape::area, хотя метод виртуальный?

  • В вектор скопирована только часть Shape — срезка
  • Виртуальные вызовы не работают через operator[]
  • Круг нужно добавлять через emplace_back
  • override скрывает метод от вызова через базу

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела