Я реализую передвижение транспорта в зависимости от его типа(наземный транспорт, морской и т.п.)
Есть базовый класс транспорта и несколько его наследников
class BaseTransport {
public:
...Какие-то методы...
virtual void Move() = 0;
protected:
поля
}
class GroundTransport : public BaseTransport {
GroundEnum state;
public:
...
void Move() override;
}
class SeaTransport : public BaseTransport {
SeaEnum state;
public:
...
void Move() override;
}
class AirTransport : public BaseTransport {
AirEnum state;
public:
...
void Move() override;
}
...
У каждого наследника есть свой отдельный enum class. Эти enumы - возможные состояния для каждого типа транспорта. Все виды транспорта двигаются по маршруту, заданному некоторому набору точек. Когда транспорт доходит до конца маршрута, то в зависимости от типа транспорта он останавливается, либо возвращается в начало маршрута(то есть выставляется состояние на возвращение в начальную точку).
У наследников в методе Move есть одинаковый код, который отличается только значениями enum
void GroundTransport::Move() {
...одинаковый код...
state = GroundEnum::Finished
...одинаковый код...
}
void SeaTransport::Move() {
...одинаковый код...
state = SeaEnum::ReturnToBegin
...одинаковый код...
}
...
Как это можно свести к одному методу в базовом классе?
upd: Изменил описание вопроса