В следующем примере я буду использовать динамическую диспетчеризацию для вызова виртуальных функций?
struct Base{
virtual double fn(){return 3.2;}
};
struct Deri1 : public Base{
using Base::fn;
}
struct Deri2 : public Base{
virtual double fn(){return 4.6;}
}
Классы, которые я реализую, содержат гораздо больше информации, но есть некоторые, которые я хочу оставить по умолчанию для некоторых производных классов, но переопределить в других, примером может служить fn () в приведенном выше коде. По сути, я просто использую базовый класс, чтобы избежать перезаписи fn () каждый раз, когда он не переопределяется. Это правильный путь?
Спасибо!
Можно избежать динамической отправки, избегая ключевого слова virtual в определении функции, до тех пор, пока один не использует указатели, как объяснено в этом ссылка на сайт.
Это создает некоторые сложности с общими методами и полиморфизмом. Если кто-то использует динамический полиморфизм, он передал бы указатель на базовый класс методу, и в этом случае ключевое слово «virtual» необходимо для указателя, чтобы определить, какой метод использовать. Можно определить статический полиморфный метод, используя шаблоны, как объяснено в следующем ссылка на сайт.
Других решений пока нет …