Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Operatoren in Turbo Delphi (Win32) überladen? (https://www.delphipraxis.net/76704-operatoren-turbo-delphi-win32-ueberladen.html)

7eddi 8. Sep 2006 13:16


Operatoren in Turbo Delphi (Win32) überladen?
 
Hi,

kann ich in Turbo Delphi für Win32 Operatoren überladen? In der Hilfe steht "Ja", der Compiler meckert trotzdem.

Danke und Gruß,
Lucas

Daniel 8. Sep 2006 13:20

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Das geht - jedoch wie auch im BDS2006 nur bei Records (!). Bei welchem Code meckert denn der Compiler?

3_of_8 8. Sep 2006 13:20

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Ja, das geht. Nur ohne Code kann ich dir mangels Kristallkugel nicht helfen. ;)

Elvis 8. Sep 2006 13:21

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Na und was sollen wir dir jetzt dazu sagen können? Mit dem was du uns an Infos gabst: Ja, es geht.
Aber das hilft dir nicht wirklich weiter, rightig? :mrgreen:

Probieren wir es also am Besten gleich nochmal von vorne und du zeigst uns wie du es versucht hast und was der Compiler dazu gesagt hat. ;)

Zitat:

Zitat von Daniel
Das geht - jedoch wie auch im BDS2006 nur bei Records (!). Bei welchem Code meckert denn der Compiler?

:shock: Das musste ich auch gerade mit Erschrecken feststellen! :cry:

7eddi 8. Sep 2006 13:39

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Nur bei Records? Sorry, aber ich bin gar nicht auf die Idee gekommen, dass jemand bei Records Operatoren überladen wollen würde und daher dachte ich, dass meine (allgemein technische) Frage auch ohne Code, der als einfaches Beispiel eher trivial ist, eindeutig wäre. Nun gut, in der Hilfe steht zunächst nur etwas von Records, in dem unteren Beispiel werden aber auch Klassen genannt :gruebel:.
Ich habe natürlich versucht, die Operatoren einer Klasse zu überladen - daher funktionierte es wohl nicht.

Wieso klappt das denn nur bei Records? Gibt es Hoffnung, dass sich das mit der nächsten Version endlich ändert?

Meflin 8. Sep 2006 13:42

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von 7eddi
Nun gut, in der Hilfe steht zunächst nur etwas von Records, in dem unteren Beispiel werden aber auch Klassen genannt :gruebel:.

Hm, das Beispiel mit den Klassen bezieht sich aber auf Delphi .Net - da ist wohl die gliche Hilfe wie beim BDS dabei :mrgreen: ?
Andererseits musste ich fesstellen dass records ggü. Klassen praktisch keinen Nachteil haben - die können ja auch private & public Teile haben, das einzige was nicht geht ist eben Vererbung (und destructoren, aber auf die kann man ja sch***** ;) )


Daniel 8. Sep 2006 13:45

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Wie würde man das denn überhaupt bei Klassen idealerweise anstellen?

Gehen wir davon aus, ich habe drei Variablen vom Typ TMeineTolleKlasse und habe für diese Klasse die Addition definiert.

Delphi-Quellcode:
procedure foo;
var a, b, c : TMeineTolleKlasse;
begin
  a:= TMeineTolleKlasse.Create;
  b:= TMeineTolleKlasse.Create;

  c:= a + b;

  a.Free;
  b.Free;
  c.Free;
end;
Der überladene Operator würde also eine neue Instanz erzeugen und sie zurückliefern. In meinem Beispiel wäre sie dann an C gebunden. Was mache ich - ohne Garbage-Collector, wenn C vorher schon eine Instanz der Klasse an sich gebunden hatte? Habe ich dann nicht ein Speicher-Löchlein?

mkinzler 8. Sep 2006 13:53

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Bei Datentypen würde sich ein Record anbieten, der besitzt unter Win32 class operators(!) Klassen nicht (!)

Daniel 8. Sep 2006 13:55

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Jaja, soweit waren wir ja schon. ;-) Nur wie regeln das andere Sprachen bei Klassen? Diese Einschränkung schien ja eine größere Bestürzung hervorzurufen.

mkinzler 8. Sep 2006 13:56

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Nur wie regeln das andere Sprachen bei Klassen? Diese Einschränkung schien ja eine größere Bestürzung hervorzurufen.
Da geht es wie auch unter D.Net

Insider2004 8. Sep 2006 14:00

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Da gibt es bereits einen QC:

http://qc.borland.com/wc/qcmain.aspx?d=32998

Wer Operatoren in Klassen will, der sollte da seine Stimme abgeben und Voten.

mkinzler 8. Sep 2006 14:01

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Wer Operatoren in Klassen will, der sollte da seine Stimme abgeben und Voten.
Meine Stimme haben die!

Elvis 8. Sep 2006 14:13

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von mkinzler
Zitat:

Wer Operatoren in Klassen will, der sollte da seine Stimme abgeben und Voten.
Meine Stimme haben die!

Dito!
Sicher ist es mehr als ein zweischneidiges Schwert wenn es um Ref Types in D32 geht.
Aber die Entscheidung sollte IMHO dem Programmierer überlassen werden, nicht dem Compiler. ;)

Daniel 8. Sep 2006 14:19

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von Elvis
Aber die Entscheidung sollte IMHO dem Programmierer überlassen werden, nicht dem Compiler. ;)

Wös? :shock: Soll ich jetzt etwa auch noch nachdenken beim Entwickeln? ... und dabei wollte ich doch nur klicken...
:mrgreen:

Insider2004 8. Sep 2006 14:23

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von mkinzler
Zitat:

Wer Operatoren in Klassen will, der sollte da seine Stimme abgeben und Voten.
Meine Stimme haben die!

Dito!
Sicher ist es mehr als ein zweischneidiges Schwert wenn es um Ref Types in D32 geht.
Aber die Entscheidung sollte IMHO dem Programmierer überlassen werden, nicht dem Compiler. ;)

Ich überlasse dem Compiler überhaupt nie nicht keine Entscheidung. :sharkylinchen:

Chewie 9. Sep 2006 09:12

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Gibt es denn überhaupt Sprachen, die Operatorüberladung bei Referenztypen zulassen, ohne eine GC zu besitzen? Das würde doch den Vorteil der Operatorüberladung, nämlich intuitivere Lesbarkeit, mehr als kaputtmachen durch die ganzen Destruktoraufrufe. Oder alternativ Speicher fressen noch und nöcher :mrgreen:

SirThornberry 9. Sep 2006 10:18

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
mir ist auch noch unklar wie das ganze bei klassen funktionieren soll. Dann müsste man ja wirklich beim überladen des Operators alle Properties und Variablen der Klasse neu setzen.

Chewie 9. Sep 2006 10:26

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von SirThornberry
mir ist auch noch unklar wie das ganze bei klassen funktionieren soll. Dann müsste man ja wirklich beim überladen des Operators alle Properties und Variablen der Klasse neu setzen.

Wenn du einen Operator überlädst, definierst du ja eine Operation, in der du ja dies alles vornehmen kannst. Ich kenn Operatorüberladung bisher nur von C++, da kann (bzw. sollte) man dann auch sowas wie Copy-Konstruktoren überladen.

Insider2004 9. Sep 2006 11:11

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Schaut euch mal das Video #2 von Daniel an. Da dürften keine Fragen übrig bleiben.
http://www.delphipraxis.net/video#turbodelphi
Das ist zwar anhand von Records erklärt, für Klassen wäre das aber auch eine feine Sache. In C++ geht's ja auch!

Chewie 9. Sep 2006 11:31

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von Insider2004
Das ist zwar anhand von Records erklärt, für Klassen wäre das aber auch eine feine Sache. In C++ geht's ja auch!

Warum das nur in Delphi.NET bei Klassen geht, ist weiter oben erklärt. Und in C++ gehts deswegen, da Klassen dort Wert- und keine Referenztypen sind.

Insider2004 9. Sep 2006 11:37

Re: Operatoren in Turbo Delphi (Win32) überladen?
 
Zitat:

Zitat von Chewie
Zitat:

Zitat von Insider2004
Das ist zwar anhand von Records erklärt, für Klassen wäre das aber auch eine feine Sache. In C++ geht's ja auch!

Warum das nur in Delphi.NET bei Klassen geht, ist weiter oben erklärt. Und in C++ gehts deswegen, da Klassen dort Wert- und keine Referenztypen sind.

Wusste ich :zwinker:
In diesem Fall kannst Du ja hier voten:
http://qc.borland.com/wc/qcmain.aspx?d=32076


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz