Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Operator Overloading in einer Klasse? (https://www.delphipraxis.net/69277-operator-overloading-einer-klasse.html)

Meflin 12. Mai 2006 21:18


Operator Overloading in einer Klasse?
 
Aloa!

Wenn D2006 die Möglichkeit nun schon bietet, würde ich doch gerne mal aufs operator overloading zurückgreifen :)

Folgendes funktioniert auch:
Delphi-Quellcode:
  TPseudoNumber = record
    class operator Add(a: TPseudoNumber; b: Cardinal): TPseudoNumber;
  end;
Allerdings brauche ich keinen record, sondern eine Klasse, und folgendes funktioniert nicht:
Delphi-Quellcode:
  TPSeudoNumber = class
    class operator Add(a: TPseudoNumber; b: Cardinal): TPseudoNumber;
  end;
Nicht wenn mans so macht, nicht wenn mans in den public Teil steckt, einfach garnie :( Er spuckt immer den Fehler "[Pascal Fehler] BFDefs.pas(67): E2123 PROCEDURE, FUNCTION, PROPERTY oder VAR erwartet" aus.

Meine Frage: kann es wirklich sein, dass man das nur in records verwenden kann? Das wäre ja oberst blöde.


Hawkeye219 12. Mai 2006 22:07

Re: Operator Overloading in einer Klasse?
 
Hallo Meflin,

die Online-Hilfe hat für deine Frage folgende Antwort:

Zitat:

Zitat von Online-Hilfe
Delphi für .NET und Delphi für Win32 ermöglicht es, bestimmte Funktionen, auch "Operatoren" genannt, innerhalb von Record-Deklarationen zu überladen. Delphi für .NET lässt außerdem das Überladen in Klassendeklarationen zu.

Gruß Hawkeye

Meflin 14. Mai 2006 14:07

Re: Operator Overloading in einer Klasse?
 
sehr schade :( allerdings stellt sich da mir die frage: sinn, wo bleibst du?


MagicAndre1981 14. Mai 2006 15:01

Re: Operator Overloading in einer Klasse?
 
Zitat:

Zitat von Meflin
sehr schade :( allerdings stellt sich da mir die frage: sinn, wo bleibst du?

frag das Borland :roll:

Chewie 14. Mai 2006 15:31

Re: Operator Overloading in einer Klasse?
 
Zitat:

Zitat von Meflin
sehr schade :( allerdings stellt sich da mir die frage: sinn, wo bleibst du?

Das ist mehr Notwendigkeit als Sinn.
Bei überladenen Operatoren werden neue Objekte angelegt, die "Addition" zweier Objekte ergibt ein neues Objekt. Records sind Werttypen, die auf dem Stack liegen -> wird die Prozedur abgearbeitet, ist der Speicher frei. Bei Delphi.NET gibt es eine GC, also auch wunderbar.

Bei Delphi.W32 aber gibt es keine GC, ein Objekt, das durch die Anwendung eines überladenen Operators implizit erzeugt würde, müsste vom Aufrufer freigegeben werden. Und wenn das immer machen würde, würde man das, was man durch Operatorüberladung an Code-Lesbarkeit gewinnt, durch die ständigen Free-Aufrufe wohl mehr als verlieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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 by Thomas Breitkreuz