У меня возникла следующая проблема.виртуальные методы C++
я реализую родительский класс - Vehicle, он имеет некоторые производные классы, один из них - FastVehicle.
В программе мне нужно хранить указатели Vector of Vehicle *. указатели могут указывать на объекты транспортного средства или объекты FastVehicle.
1) Я хочу, чтобы иметь возможность называть метод print() для каждого объекта в векторе. Проблема заключается в том, что в случае FastVehicle я также хочу Tranfer параметр функции, мне нужно вызвать функцию с подписью:
void print(int a)
Я знаю немного о механизме виртуальной функции, но по Насколько мне известно, это работает, только если обе функции имеют одну и ту же подпись.
Я хотел бы услышать предложения, касающиеся того, как это работает.
2) Кроме того, в производном классе FastVehicle имеет уникальную функцию, которую он не разделяет с родительским классом Vehicle. Выполняет задачу, которая должна выполняться только для FastVehicle объектов. Каков самый чистый способ достичь этого? я подумал, что для реализации «пустой» виртуальной функции в родительском классе автомобиля и реализовать «реальную» задачу внутри наиважнейшей методы FastVehicle
Может быть кто-то может предложить лучшее решение.
благодарит
Либо реализовать общий интерфейс, либо использовать dynamic_cast. –
'dynamic_cast' - это ответ, если вы действительно хотите, чтобы производные классы имели несовместимые интерфейсы. Определение общего интерфейса было бы намного чище, если можно. –
Необходимость использования 'dynamic_cast' часто является признаком того, что вы недостаточно продумали все. – OMGtechy