У меня есть следующие классы, связанные с математикой/геометрией: MathLine
, MathPoint
, MathVector
, MathPlane
.Литье родительского класса в детский класс, чтобы избежать избыточности
На каждом из них вы можете выполнять преобразования вращения и перевода. Поэтому я создал родительский класс с именем GeometricObject
, объекты, которые могут быть преобразованы в геометрическое пространство.
Теперь я могу создавать чистые виртуальные функции класса с различными реализациями для каждого дочернего класса. Теперь, я хочу общую функцию, которая может принимать GeometricObject
, но «шикарно» вернуть то, что тип я на самом деле положить в К примеру, у меня есть следующая функция, которая вращает Геометрический объект в другой системе координат:.
GeometricObject rotate_object_to_global_coordinate_system(GeometricObject object) {
object.rotateX(90); // Pure virtual functions
object.rotateY(90);
object.rotateZ(90);
return object;
}
Если я ввожу в него MathLine, я ожидаю, что функция будет «отлита» в MathLine
, выполнит выполнение моих виртуальных функций MathLine
и вернет MathLine
.
Я искал везде для этого, и, похоже, это можно сделать, используя либо указатели (auto_ptr
), либо литье (dynamic_cast
). Это не кажется хорошим, потому что я читал, что это плохой способ сделать это, потому что он жертвует заметным количеством производительности. Это также похоже на простую функцию, которую должен иметь язык программирования высокого уровня. Это можно сделать?
Я думаю, для меня очень важно это сделать, потому что в противном случае мне пришлось бы писать отдельные функции, которые в основном выполняют одни и те же виртуальные функции для разных дочерних классов. Я должен был бы написать:
MathLine rotate_line_to_global_coordinate_system(MathLine object);
MathPoint rotate_point_to_global_coordinate_system(MathPoint object);
MathPlane rotate_plane_to_global_coordinate_system(MathPlane object);
// etc.
Я довольно уверен, что я проверил это, и это не работает. Вот почему я поставил этот вопрос в первую очередь. Тем не менее, я дважды проверю и дам вам знать. Спасибо! –
@RandyArdywibowo Отправьте свой код, если вы хотите получить помощь непосредственно на нем. – Aracthor