Когда отмечать функцию в C ++ как виртуальный?

Из-за характера статической привязки методов в C ++ это влияет на полиморфные вызовы.

Из Википедии:

Хотя накладные расходы, связанные с этим механизмом отправки, невелики, они могут быть значительными для некоторых областей приложений, для которых был разработан язык . По этой причине Бьярн Страуструп, разработчик C ++, решил сделать динамическую отправку необязательной и нестандартной. Только функции, объявленные с ключевым словом virtual, будут отправляться в зависимости от типа среды выполнения объекта; другие функции будут отправляться на основе статического типа объекта.

Итак, код:

Polygon* p = new Triangle;
p->area();

при условии, что area () является невиртуальной функцией в родительском классе, которая переопределена в дочернем классе, приведенный выше код вызовет метод родительского класса , чего разработчик может не ожидать. (благодаря введенной мною статической привязке)

Итак, если я хочу написать класс, который будет использоваться другими (например, библиотека), должен ли я сделать все свои функции виртуальными для запуска такого предыдущего кода как и ожидалось?

11
задан John Dibling 28 November 2011 в 15:34
поделиться