AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Klassen Operatoren

Ein Thema von Andreas L. · begonnen am 8. Nov 2019 · letzter Beitrag vom 8. Nov 2019
Antwort Antwort
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Sulzbach-Rosenberg
269 Beiträge
 
Delphi 10.3 Rio
 
#1

Klassen Operatoren

  Alt 8. Nov 2019, 10:15
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?
Andreas Lauß
CookieCrumbler Blog
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.078 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Klassen Operatoren

  Alt 8. Nov 2019, 10:40
Funktioniert nur mit Records.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.050 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Klassen Operatoren

  Alt 8. Nov 2019, 11:20
Der Grund ist auch relativ einfach erklärt: Records werden automatisch freigegeben, Klassen nicht. Angenommen du überlädst den + Operator und rechnest d := a + b + c . a + b ergibt ein temporäres Objekt das dann mit c verrechnet wird. Wer gibt das frei? Niemand. Speicherleck.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.077 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Klassen Operatoren

  Alt 8. Nov 2019, 11:22
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...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
577 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Klassen Operatoren

  Alt 8. Nov 2019, 12:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.598 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Klassen Operatoren

  Alt 8. Nov 2019, 14:36
Der Grund ist auch relativ einfach erklärt: Records werden automatisch freigegeben, Klassen nicht. Angenommen du überlädst den + Operator und rechnest d := a + b + c . 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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.050 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Klassen Operatoren

  Alt 8. Nov 2019, 15:59
Macht auch keinen Sinn dass es (meine ich) auf den ARC-Compilern auch nie funktioniert hat.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.598 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Klassen Operatoren

  Alt 8. Nov 2019, 18:16
Macht auch keinen Sinn dass es (meine ich) auf den ARC-Compilern auch nie funktioniert hat.
Doch, hat es
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
TurboMagic
Online

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
466 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Klassen Operatoren

  Alt 8. Nov 2019, 20:18
Gemeldet:
https://quality.embarcadero.com/browse/RSP-26605
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf