2013-10-27 3 views
0

В настоящее время у меня есть два класса: Drawable и Transformable, и такие вещи, как Actors, наследуют оба из них, проблема заключается в том, чтобы рисовать объекты на экране. Я повторяю вектор Drawable, которые не имеют функции getPosition(), включенной в трансформер. Добавление виртуального getPosition() в Drawable разрешает это, но затем создает проблему неоднозначных вызовов функции в другом месте. Могу ли я нарисовать наследуемый Transableable и Actor наследовать Drawable и получить тот же результат, как если бы он наследовал оба класса?Наследование цепей

EDIT: Drawables - это не все актеры, некоторые - спрайты (игровые объекты), примитивные фигуры и т. Д. На самом деле единственной причиной, по которой мне нужен getPosition() в рисовальном цикле, является то, что для подделки глубины I цикл через вектор, чтобы перейти от координаты 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 {} 

Может ли объект наследовать открытые и защищенные члены класса их родителей наследуется?

+0

Вы попытались отобразить свойства по типам. Почему бы не стать актером? Как вы обнаружили, зная, что что-то «доступно», это не то же самое, что знать «как его нарисовать». Собственно, в этом случае я бы сказал, что что-то должно иметь положение, даже если оно не трансформируется. –

+3

почему бы не показать код? –

+0

Por queno los dos ?! – azz

ответ

0

В этом случае проект, который я выбрал, удаляет класс Transformable и перемещает позиционные атрибуты и функции-члены в класс Drawable. Что-то, что нужно «вытащить», нужно где-то нарисовать и, следовательно, требует положения, независимо от того, может оно двигаться или нет.

Может ли объект наследовать общедоступные и защищенные члены класса, который их родитель наследует?

Короткие и сладкие: Да. (Только если наследование составляет public или protected)

См. this для получения дополнительной информации о типах наследования.

+0

Точно, что мне нужно знать, спасибо! – Mike

+0

Также рекомендуем взглянуть на [этот ответ] (http://stackoverflow.com/a/1372858/1280997). – azz

0

Рассмотрите, если объект, который не является пригодным для переноски, никогда не будет преобразован в первую очередь. Зачем перемещать то, что никогда не увидишь.

Кроме того, не следует ли getPosition (и предположительно setPosition) на самом деле быть частью чего-то, что можно сделать? Откуда вы знаете, где рисовать иначе.

Я настоятельно рекомендую тщательно пересмотреть структуру вашего класса, объединить функциональность, которая является общей, не имеет миллионов лишних интерфейсов, потому что вы можете.

+0

Я согласен, но я изменяю библиотеку с открытым исходным кодом, чтобы работать с тем, что я хочу делать, изменение всей структуры библиотеки на этом этапе было бы намного больше, чем я хочу принять. Функция draw на самом деле является виртуальной функцией в drawable, она реализована в классе Drawables friend RenderTarget, который использует указатель на вершины объекта и число вершин в массиве, чтобы нарисовать примитивы в определенном файле renderstate. Он запутан, но он работает, и я не писал его, поэтому я бы предпочел не менять его. – Mike

Смежные вопросы