В настоящее время у меня есть два класса: Drawable и Transformable, и такие вещи, как Actors, наследуют оба из них, проблема заключается в том, что при рисовании объектов на экране я повторяю вектор Drawable, который не имеет функции getPosition(), включенной в Transformable. Добавление виртуального getPosition() в Drawable разрешает это, но затем создает проблему неоднозначных вызовов функции в другом месте. Могу ли я нарисовать наследуемый Transableable и Actor наследовать Drawable и получить тот же результат, как если бы он наследовал оба класса?
EDIT: Drawables - это не все актеры, некоторые - спрайты (игровые объекты), примитивные фигуры и т.д. На самом деле единственной причиной, по которой мне нужен getPosition() в цикле рисования, является то, что для того, чтобы подделать глубину, я петлю через вектор перейдите от координаты 0 Y к нижней части экрана, объекты, расположенные выше на экране, сначала нарисованы, а затем позади объектов ближе к "фронту". Я не писал классы Drawable/Transformable, и я предпочел бы не полностью их изменять, чтобы удовлетворить один вызов функции в одном экземпляре. Единственный момент, когда это проблема, - это когда я ссылаюсь на вектор Drawables. Мне не совсем понятно, почему это было спроектировано так, как это было, потому что все, что использует класс drawable, также наследует трансформируемый класс, поэтому они должны быть едины, но они не являются.
Мой вопрос заключается в следующем:
class foo {}
class bar{}
class foobar : public foo, public bar {}
такая же, как и эта
class foo {}
class bar : public foo {}
class foobar : public bar {}
Может ли объект наследовать общедоступные и защищенные члены класса, который их родитель наследует?
В этом случае дизайн, который я бы выбрал, - это удаление класса Transformable и перенос позиционных атрибутов и функций-членов в класс Drawable. Что-то, что нужно "вытащить", нужно где-то нарисовать и, следовательно, требует положения, независимо от того, может оно двигаться или нет.
Может ли объект наследовать общедоступные и защищенные члены класса, который их родитель наследует?
Короткий и сладкий: Да. (Только если наследование является public
или protected
)
Смотрите это для получения дополнительной информации о типах наследования.
Подумайте, будет ли когда-либо преобразован объект, который не является пригодным для рисования. Зачем перемещать то, что никогда не увидишь.
Кроме того, не следует ли getPosition (и предположительно setPosition) на самом деле быть частью чего-то, что можно сделать? Откуда вы знаете, где рисовать иначе.
Я настоятельно рекомендую тщательно пересмотреть структуру вашего класса, объединить функциональность, которая является общей, не имеет миллионов лишних интерфейсов, потому что вы можете.