Вопрос:

Вы разрабатываете на С++ графическую систему, в которой имеется базовый класс Shape с методом draw(). Для разных фигур (таких как круг, прямоугольник и треугольник) метод draw() должен реализовывать свое собственное поведение при вызове через указатель или ссылку на базовый класс. Какой подход позволяет корректно реализовать вызов метода draw() с учетом типа конкретной фигуры во время выполнения программы?

Ответ:

Решение:

В объектно-ориентированном программировании для реализации полиморфизма, когда метод базового класса должен вести себя по-разному в зависимости от конкретного типа объекта, используется механизм виртуальных функций.

Объявление метода draw() виртуальным в базовом классе Shape позволяет компилятору во время выполнения программы определить фактический тип объекта (например, Circle, Rectangle) и вызвать соответствующую переопределенную версию метода draw().

Остальные варианты не подходят:

  • Сделать draw() обычной функцией: Это приведет к вызову версии функции из базового класса, независимо от типа объекта.
  • Использовать шаблон вместо класса: Шаблоны в C++ используются для метапрограммирования и создания обобщенного кода, но не решают проблему динамического полиморфизма вызовов методов.
  • Реализовать draw() только в main: Это непрактично и не соответствует принципам объектно-ориентированного дизайна. Метод должен быть частью класса фигуры.

Ответ: Объявить draw() виртуальной в базовом классе.

Подать жалобу Правообладателю