Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Klassen Operatoren (https://www.delphipraxis.net/202477-klassen-operatoren.html)

Andreas L. 8. Nov 2019 09:15

Klassen Operatoren
 
Hallo,

ich habe gerade das Tutorial über TVersion und Klassen-Operatoren von Codehunter gelesen.

Jetzt wollte ich versuchen ob man auch richtige Klassen statt Records mit diesen Operatoren ausstatten kann.

In der Delphi Online-Hilfe steht das auch Klassen mit Operatoren überladen werden können:

Zitat:

Nur die in der Tabelle aufgeführten Operatoren können für eine Klasse oder einen Record definiert werden.
http://docwiki.embarcadero.com/RADSt...atoren_(Delphi)

Das ist mein Code:
Delphi-Quellcode:
...
type
  TTest = class
  private
    FValue: Integer;
  public
    class operator Equal(A: TTest; B: TTest): Boolean; // Zeile 14!
  published
    property Value: Integer read FValue write FValue;
  end;
...
class operator TTest.Equal(A: TTest; B: TTest): Boolean;
begin
  Result := A.Value = B.Value;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  test1: Ttest;
  test2: Ttest;
begin
  test1 := TTest.Create;
  try
    test2 := TTest.Create;
    try
      test1.Value := Edit1.Text.ToInteger;
      test2.Value := Edit2.Text.ToInteger;

      ShowMessage(BoolToStr(test1 = test2, True));
    finally
      test2.Free;
    end;
  finally
    test1.Free;
  end;
end;
Leider erhalte ich folgende Fehlermeldung vom Compiler:
Zitat:

[dcc32 Fehler] Unit1.pas(14): E2123 PROCEDURE, FUNCTION, PROPERTY oder VAR erwartet
Warum geht das bei mir nicht? Was mache ich falsch?

Neutral General 8. Nov 2019 09:40

AW: Klassen Operatoren
 
Funktioniert nur mit Records.

Der schöne Günther 8. Nov 2019 10:20

AW: Klassen Operatoren
 
Der Grund ist auch relativ einfach erklärt: Records werden automatisch freigegeben, Klassen nicht. Angenommen du überlädst den + Operator und rechnest
Delphi-Quellcode:
d := a + b + c
.
Delphi-Quellcode:
a + b
ergibt ein temporäres Objekt das dann mit c verrechnet wird. Wer gibt das frei? Niemand. Speicherleck.

Uwe Raabe 8. Nov 2019 10:22

AW: Klassen Operatoren
 
Das ist ein Fehler in der Doku - offenbar ein Relikt aus .NET-Zeiten. Der Text müsste mal komplett überarbeitet werden, aber dafür fehlt mir gerade die Zeit. Man könnte es aber so auch stehen lassen und hoffen, daß der Compiler irgendwann mal nachzieht...

TigerLilly 8. Nov 2019 11:47

AW: Klassen Operatoren
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1451004)
Man könnte es aber so auch stehen lassen und hoffen, daß der Compiler irgendwann mal nachzieht...

:- ) Das nennt man dann die normative Kraft des Faktischen.

Stevie 8. Nov 2019 13:36

AW: Klassen Operatoren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1451003)
Der Grund ist auch relativ einfach erklärt: Records werden automatisch freigegeben, Klassen nicht. Angenommen du überlädst den + Operator und rechnest
Delphi-Quellcode:
d := a + b + c
.
Delphi-Quellcode:
a + b
ergibt ein temporäres Objekt das dann mit c verrechnet wird. Wer gibt das frei? Niemand. Speicherleck.

Macht nur leider kein Sinn bei Operatoren, die keine neuen Werte/Instanzen erzeugen, wie Vergleiche.

Der schöne Günther 8. Nov 2019 14:59

AW: Klassen Operatoren
 
Macht auch keinen Sinn dass es (meine ich) auf den ARC-Compilern auch nie funktioniert hat.

Stevie 8. Nov 2019 17:16

AW: Klassen Operatoren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1451030)
Macht auch keinen Sinn dass es (meine ich) auf den ARC-Compilern auch nie funktioniert hat.

Doch, hat es

TurboMagic 8. Nov 2019 19:18

AW: Klassen Operatoren
 
Gemeldet:
https://quality.embarcadero.com/browse/RSP-26605


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