Ich habe die folgenden Klassen in Bezug auf Mathematik/Geometrie: MathLine
, MathPoint
, MathVector
, MathPlane
.Übergeordnete Klasse in untergeordnete Klasse umwandeln, um Redundanz zu vermeiden
Auf jeder dieser Funktionen können Sie Rotations- und Translationstransformationen durchführen. Also habe ich eine Elternklasse namens GeometricObject
geschaffen, Objekte, die im geometrischen Raum transformiert werden können.
Jetzt bin ich in der Lage, reine virtuelle Klassenfunktionen mit verschiedenen Implementierungen für jede Kindklasse zu erstellen. Nun mag ich eine allgemeine Funktion, die GeometricObject
nehmen kann, aber „intelligent“ zurückkehren, welche Art ich tatsächlich setzte in Zum Beispiel, ich habe die folgende Funktion, die ein geometrisches Objekt zu einem anderen Koordinatensystem dreht.
GeometricObject rotate_object_to_global_coordinate_system(GeometricObject object) {
object.rotateX(90); // Pure virtual functions
object.rotateY(90);
object.rotateZ(90);
return object;
}
Wenn ich eine MathLine hineinlege, erwarte ich, dass die Funktion in eine MathLine
"caste", die Implementierung meiner virtuellen Funktionen MathLine
ausführt und eine MathLine
zurückgibt.
Ich habe überall nach diesem gesucht und es scheint, als ob dies entweder mit Zeigern (auto_ptr
) oder Gießen (dynamic_cast
) getan werden kann. Das scheint nicht gut zu sein, weil ich gelesen habe, dass es ein schlechter Weg ist, es zu tun, weil es eine merkliche Menge an Leistung opfert. Es scheint auch ein einfaches Feature zu sein, das eine höhere Programmiersprache haben sollte. Kann das gemacht werden?
Ich denke, es ist wirklich wichtig für mich, dies zu tun, weil ich sonst separate Funktionen schreiben müsste, die im Grunde die gleichen virtuellen Funktionen für verschiedene Kindklassen ausführen. Ich müsste schreiben:
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.
Ich bin mir ziemlich sicher, ich habe diese geprüft und es funktioniert nicht. Deshalb habe ich diese Frage überhaupt erst gestellt. Ich werde dies jedoch überprüfen und Ihnen mitteilen. Vielen Dank! –
@RandyArdywibowo Posten Sie Ihren Code, wenn Sie direkt Hilfe benötigen. – Aracthor