Hi,
ich wechsle im moment ständig zwischen C++ und Delphi hin und her beim programmieren... jenachdem welches sich besser anbietet etc.
Eine sache die mich mittlerweile richtig nervt an Delphi ist, dass (zumindest bei Delphi6) diese ganze sache mit Records und Klassen sehr unpraktikabel ist..
Beispiel:
Ich programmiere viel mit 3D, habe also eine klasse "TVertex" welche aus 3 Float werten X, Y und Z besteht. Ich verwende TVertex extrem häufig in vielen funktionen etc. Ausserdem gibt es viele funktionen wie Multiply oder PunktProdukt etc die ich mit TVertex verwende.. also z.B. TVertex * TVertex, oder eine funktion um die entfernung zweier Vertices zu bestimmen.
Jetzt gibt es grundlegend 2 möglichkeiten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| type TVertex = Record x, y, z: Single; end;
function getDistance(A, B: TVertex): Single; function multiplyVertex(A, B: TVertex): TVertex; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| type TVertex = class public x, y, z: Single; function getDistance(V: TVertex): Single; function multiplyVertex(V: TVertex): TVertex; end; |
An und für sich finde ich die Klassen-Variante besser, da ich so einfach via
myVertex.getDistance() die distanz zu einem anderne vertex bekomme und es einfach im sourcecode viel viel übersichtlicher ist.
Der riesen nachteil ist halt, das ich JEDES vertex ständig Create'en und Free'en muß... und das geht u.U. nicht immer, bzw nur sehr sehr umständlich (z.B. ein TVertex als result..)
Der vorteil von C++ ist halt, das man klassen nicht erstellen/freigeben muß, sondern einem das von c++ abgenommen wird (und natürlich das Records in C++ auch funktionen haben können).
Jetzt gibt es natürlich noch das "Object" in Delphi..
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TVertex = object x, y, z: Single; function getDistance(V: TVertex): Single; function multiplyVertex(V: TVertex): TVertex; end; |
Damit funktioniert es genau so, wie ich es gern hätte (davon abgesehen das man von objekten nichts ableiten kann etc).. allerdings habe ich schon sehr oft gehört das man die nichtmehr verwenden soll etc...
Deshalb jetzt mal ne generelle frage... wie geht man an sowas am besten ran?
Die lösung mit dem Record ist die, die ich am wenigsten mag und eigentlich auch um alles in der welt verhindern will.. (im moment nutze ich immer
Object)
Aya~