Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Eigene Operatoren definieren? (https://www.delphipraxis.net/142727-eigene-operatoren-definieren.html)

Teekeks 2. Nov 2009 18:35


Eigene Operatoren definieren?
 
Hallo!
Erstmal vorweg: diese frage hat nichts mit einem Praktischen Problem zu tun, sondern vielmehr mit der frage: "geht das theoretisch und wenn ja, wie?".

Ich habe mich gefragt, ob es möglich ist, sich eigene Operatoren zu definieren, also so etwas wie das "+"-Zeichen.

Gruß Teekeks

mkinzler 2. Nov 2009 18:37

Re: Eigene Operatoren definieren?
 
Ja mit sogenannten Class Operatoren ( unter Win32 seit D10 paradoxerweise nicht für Klassen, sondern nur für Records verfügbar)

Apollonius 2. Nov 2009 18:38

Re: Eigene Operatoren definieren?
 
Du kannst den vorhandenen Operatoren für deine eigenen Typen eine Bedeutung verleihen, aber neue Operatoren kannst du nicht einführen.

Teekeks 2. Nov 2009 18:39

Re: Eigene Operatoren definieren?
 
Zitat:

Zitat von Apollonius
Du kannst den vorhandenen Operatoren für deine eigenen Typen eine Bedeutung verleihen, aber neue Operatoren kannst du nicht einführen.

Und wie mach ich das? (von der Syntax her)

himitsu 2. Nov 2009 18:42

Re: Eigene Operatoren definieren?
 
wenn du sowas meinst
Zitat:

x = a § b
und nun z.B. für § einen neuen Operator zu definieren

in Delphi ... NEIN


wenn du sowas vordefiniertes, wie das + für einen Record nutzen willst
Hier im Forum suchenClass Operator

mkinzler 2. Nov 2009 18:43

Re: Eigene Operatoren definieren?
 
Das Stichwort Class operator/Klassenoperator wurde dir ja schon genannt

Apollonius 2. Nov 2009 18:44

Re: Eigene Operatoren definieren?
 
Indem du eine Art von Klassenmethode deklarierst, dies jedoch nicht mit class function oder class procedure, sondern mit class operator. Diese "Methode" muss einen speziellen Namen tragen, z.B. add.
@Markus #2: Warum ist das paradox? Das ist doch nur logisch, weil sich das ohne Garbage Collection einfach nicht regeln lässt.
Edit: Okay, du hast Recht. :mrgreen: Daran habe ich gar nicht gedacht.

mkinzler 2. Nov 2009 18:45

Re: Eigene Operatoren definieren?
 
@Apollonius: Class Record Operator

himitsu 2. Nov 2009 18:49

Re: Eigene Operatoren definieren?
 
Class Operator für Klassen und Interfaces bekommt man auch hin ... man muß nur ein bissl Arbeit reinstecken :angel2:

Teekeks 2. Nov 2009 18:53

Re: Eigene Operatoren definieren?
 
hmmm, geht das auch unter Lazarus?

himitsu 2. Nov 2009 19:18

Re: Eigene Operatoren definieren?
 
gute Frage ... FreePascal scheint es zu können ...
http://community.freepascal.org:1000...forum_id=24084

sirius 2. Nov 2009 19:38

Re: Eigene Operatoren definieren?
 
Zitat:

Zitat von himitsu
Class Operator für Klassen und Interfaces bekommt man auch hin ... man muß nur ein bissl Arbeit reinstecken :angel2:

--> TCustomVariantType :mrgreen:

himitsu 2. Nov 2009 19:54

Re: Eigene Operatoren definieren?
 
TCustomVariantType ist aber nur 'ne Verwaltungsklasse für einen eigenen "Variant"-Typen

und Variants sind schon ganz schön große "Records".

Aber man bekommt ein Objekt auch so mit Operatoren versehn, so daß es auch noch wie ein eigenständiges/normales Objekt reagieren kann.

Teekeks 2. Nov 2009 19:56

Re: Eigene Operatoren definieren?
 
Hmmm, ich hab jetzt das
Delphi-Quellcode:
operator + (a,b:integer ):string;//da bleibt er stehen
implementation
operator + (a,b:integer ):string;
begin
  result:=inttostr(a+b);
end;
Aber ich bekomme gesagt:
Zitat:

unit1.pas(20,33) Error: Impossible operator overload
Warum?

Gruß Teekeks
[Edit]
Das hier steht in der Graphmath.pp von lazarus:
Delphi-Quellcode:
Operator + (Addend1, Addend2 : TFloatPoint) : TFloatPoint;
implementation
Operator + (Addend1, Addend2 : TFloatPoint) : TFloatPoint;
begin
// irgendwas
end;
Also scheint die Syntax korrekt zu sein... :gruebel:

mkinzler 2. Nov 2009 20:02

Re: Eigene Operatoren definieren?
 
Delphi-Quellcode:
operator + (a,b:integer ) Result: Integer;
Das Ergebnis ist natürlich vom selben Typ

sirius 2. Nov 2009 20:02

Re: Eigene Operatoren definieren?
 
Zitat:

Zitat von himitsu
Aber man bekommt ein Objekt auch so mit Operatoren versehn, so daß es auch noch wie ein eigenständiges/normales Objekt reagieren kann.

Aber nicht in D7 :)

himitsu 2. Nov 2009 20:03

Re: Eigene Operatoren definieren?
 
hast du dir mal den Link in #11 angesehn?
(vorallem die Antwort ... weil das war genau das gleiche Problem)

[add]
nee, ab D2006 (@sirius)

Teekeks 2. Nov 2009 20:12

Re: Eigene Operatoren definieren?
 
@himitsu: hab ich und geht nicht...

Und in der graphmath.pp steht auch folgendes:
Delphi-Quellcode:
Operator + (Addend1 : TFloatPoint; Addend2 : Extended) : TFloatPoint;
implementation
Operator + (Addend1 : TFloatPoint; Addend2 : Extended) : TFloatPoint;
begin
// irgentwas
end;
Also sollte die Syntax korrekt sein. (die genannte Unit gehört zur LCL)

himitsu 2. Nov 2009 20:28

Re: Eigene Operatoren definieren?
 
probier einfach mal "add" statt "+"

Teekeks 2. Nov 2009 20:38

Re: Eigene Operatoren definieren?
 
Hmmm, neee ich hab gerade den Fehler gefunden:
Es muss ein selbst-definierter Type sein!

dominikkv 2. Nov 2009 21:39

Re: Eigene Operatoren definieren?
 
Delphi-Quellcode:
TTest = record
  private
    Data: Integer;
  public
    class operator Implicit(I: Integer): TTest;
    class operator Implicit(T: TTest): Integer;
    class operator Add(A, B: TTest): TTest;
  end;

// ...

class operator TTest.Add(A, B: TTest): TTest;
begin
  result.Data := A.Data + B.Data;
end;

class operator TTest.Implicit(I: Integer): TTest;
begin
  Result.Data := I;
end;

class operator TTest.Implicit(T: TTest): Integer;
begin
  result := T.Data;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 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