Я не знаю, как это правильно объяснить, кто-то, пожалуйста, отредактируйте мой заголовок и пост по мере необходимости.Я думал, что это можно решить с помощью полиморфизма, но я не мог заставить его работать.Я хотел бы получить следующее:
У меня будут разные формы, и у всех будут разные переменные.Например, для описания конкретной фигуры AI нужно:
Обязательные поля для каждой фигуры:
Форма может нуждаться в следующих полях или нет (возможно, в будущем мне понадобится больше)
- Длина, ширина, высота (все двойные)
- Угол
- Другие переменные, которые могут быть двойными или строковыми
Дело в том,это должно быть гибким, так как каждая фигура будет описываться с использованием XML, который мне затем нужно загрузить в программу.Например, куб будет работать так:
<?xml version="1.0" encoding="utf-8" ?>
<structure name="Cube">
<variables>
<point name="start" />
<point name="end" />
<length name="width" min="1" max="10000" unit="mm" />
<length name="height" min="1" max="10000" unit="mm" />
</variables>
<points>
<point name="topLeft">
<x>start.x</x>
<y>start.y - height/2</y>
<z>start.z</z>
</point>
<point name="topRight">
<x>end.x</x>
<y>end.y - height/2</y>
<z>end.z</z>
</point>
<point name="bottomLeft">
<x>start.x</x>
<y>start.y + height/2</y>
<z>start.z</z>
</point>
<point name="bottomRight">
<x>end.x</x>
<y>end.y + height/2</y>
<z>end.z</z>
</point>
</points>
<connections>
<connection type="line">
<point name="topLeft" />
<point name="topRight" />
<point name="bottomRight" />
<point name="bottomLeft" />
<point name="topLeft" />
</connection>
</connections>
</structure>
Итак, я думал, что у меня есть базовый класс CVariable (с двумя абстрактными методами, parseString и toString), который я потом наследую, чтобы сделать CLength (новый атрибут двойной длины), CPoint (новый атрибут double x, y и z) и CName (имя новой строки атрибута).Затем я могу иметь класс с именем CShape, у которого есть список CVariable, CPoint и CName (соединения, просто имя, идентифицирующее точку, которую нужно соединить).Я считаю, что проблема в том, что если у меня есть список CVariable, я не могу получить доступ к новым атрибутам.Я прав?
Извините, если неясно, я отредактирую, чтобы добавить любую необходимую информацию.Заранее большое спасибо.