Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Syntax für Operatorenüberladung (https://www.delphipraxis.net/171785-syntax-fuer-operatorenueberladung.html)

Codewalker 25. Nov 2012 13:13

Delphi-Version: XE2

Syntax für Operatorenüberladung
 
Hallo zusammen.

Ich möchte für eine eigene Klasse den = - Operator überladen und eine eigene "Equal"-Methode implementieren. Gemäß der Beschreibung hier, sollte das ja so aussehen:

Delphi-Quellcode:
  TBenutzer = class
    class operator Equal(A, B: TBenutzer): Boolean;
  public
    Name: String;
    Surname: String;
    procedure Clear;
  end;
Aber ich bekomme für die die operator-Deklaration (auch wenn ich sie unter public setze) als Fehler
Code:
[DCC Fehler] E2123 PROCEDURE, FUNCTION, PROPERTY oder VAR erwartet
. Kann mir jemand sagen, wo mein Denkfehler ist?

Gloegg_FHBI 25. Nov 2012 13:16

AW: Syntax für Operatorenüberladung
 
Operatoren kannst du nur bei records überladen, nicht bei klassen

und hier stehts wie es geht:
http://docwiki.embarcadero.com/RADSt...g_%28Delphi%29

himitsu 25. Nov 2012 14:45

AW: Syntax für Operatorenüberladung
 
In XE4-5-99 könnte sich das vielleich ändern, wenn Emba wirklich auf die grauenhafte Idee kommt den Ansatz, die Delphi-Klassen in "Interfaces" umzuwandeln, weiterzuentwickeln.

Aktuell spricht aber die nicht automaschite Speicherverwaltung dagegen, daß man sowas mit Klassen machen darf.
Dir hätte aber bei allen im Interet auffindbaren Beispielen, Fragethreads und Tutorials auffallen können, daß dort ausschließlich Records verwendet werden :zwinker:



Du kannst aber gerne Klassen über Interfaces in einem Record verpacken. (als Beispiel gibt es hier irgendwo eine Math-Bibliothek von mir, wo ich das mal ausprobiert/getestet hatte)

Zitat:

Zitat von Codewalker (Beitrag 1192846)
Gemäß der Beschreibung hier, sollte das ja so aussehen:

Gemäß der unten dargestellen Beispiele und der Beschreibung, gleich im allerersten Satz, nicht.

Codewalker 25. Nov 2012 15:23

AW: Syntax für Operatorenüberladung
 
Zitat:

Zitat von himitsu (Beitrag 1192853)
Zitat:

Zitat von Codewalker (Beitrag 1192846)
Gemäß der Beschreibung hier, sollte das ja so aussehen:

Gemäß der unten dargestellen Beispiele und der Beschreibung, gleich im allerersten Satz, nicht.

Dann ist auf der Seite das Beispiel schlicht falsch. Im Quelltext steht ja ein explizites
Delphi-Quellcode:
class
. Naja, bei Records hilft mir das nur bedingt. Immer diese halben Ansätze ... :(

himitsu 25. Nov 2012 15:26

AW: Syntax für Operatorenüberladung
 
Ups, stimmt. :shock:

Ich hatte irgendwie zwei Tabs vom docwiki und dachte ihr hattet das Selbe verlinkt.


Man könnte Emba ja mal was zu diesen Beispielen schreiben, aber Dinge, welche über ein Jahr alt sind, werden eh nicht repriert.


Wie geagt, aktuell nur für Records.
Interfaces gehn leider nicht, da es kein Copy-Event gibt.
Ebenso gehen keine Klassen.
Und bei Records geht es nur mit statischen Typen (z.B. Integer, Double, Char, Static-Char-Array und String), da hier auch der Copy-Befehl fehlt (weil Emba meinen Wunsch nicht eingebaut hat)

Stevie 28. Nov 2012 12:46

AW: Syntax für Operatorenüberladung
 
Soweit ich weiß, entstanden die Operator Überladungen während oder kurz nach der Delphi.NET Zeit. Daher auch class operator, weils in .Net ebend für Klassen geht. Die Syntax ist dann so geblieben.

himitsu 28. Nov 2012 12:53

AW: Syntax für Operatorenüberladung
 
Zitat:

Zitat von himitsu (Beitrag 1192864)
Und bei Records geht es nur mit statischen Typen

[edit]
Gehen tut es schon mit allen Records, aber bei referenzierten Daten, ohne Referenzzählung und vorallem ohne Copy-On-Write oder so, wird es Probleme mit der Speicherverwaltung geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.

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