![]() |
Überladen von function geht nicht ?
Hallo,
ich will gerade ein TEdit schreiben, das mit verschiedenen Typen funktioniert. Dabei habe ich Schwierigkeiten mit dem Überladen von Funktionen. In mir hegt sich das Unbehagen, daß das wohl nicht geht - ist das richtig? Ich war der Annahme, daß verschiedene Rückgabetypen ähnlich funktionieren wie verschiedene Parameterlisten. (BDS2006) Anbei habe ich mal meinen Code eingefügt:
Delphi-Quellcode:
Hat nicht jemand da eine Idee?
unit EB_Edit;
interface uses SysUtils, Classes, Controls, StdCtrls, Math; type TEB_Edit = class(TEdit) private FWert: string; function GetWert:string; overload; procedure SetWert(const Value: string); overload; function GetWert:integer; overload; procedure SetWert(const Value: integer); overload; function GetWert:single; overload; procedure SetWert(const Value: single); overload; procedure SetWert(const Value: single;rn:integer); overload; { Private-Deklarationen } protected { Protected-Deklarationen } { Public-Deklarationen } { Published-Deklarationen } public published property Wert:string read FWert write SetWert; end; procedure Register; implementation procedure Register; begin RegisterComponents('EB_Tools', [TEB_Edit]); end; { TEB_Edit } { TEB_Edit } function TEB_Edit.GetWert: string; begin result := Text; end; procedure TEB_Edit.SetWert(const Value: string); begin FWert := Value; Text:=FWert; end; function TEB_Edit.GetWert: integer; begin result:= StrToInt(Text); end; procedure TEB_Edit.SetWert(const Value: integer); begin FWert := IntToStr(Value); Text:=FWert; end; function TEB_Edit.GetWert: single; begin result:= StrToFloat(Text); end; procedure TEB_Edit.SetWert(const Value: single); begin FWert := FloatToStr(Value); Text:=FWert; end; procedure TEB_Edit.SetWert(const Value: single; rn: integer); begin FWert := FloatToStr(roundTo(Value,-rn); Text:=FWert; end; end. Vielen Dank E. B. |
Re: Überladen von function geht nicht ?
Die Überladung funktioniert nur mit verschiedenen Parameterlisten, damit der Compiler die einzelnen Funktionen auseinander halten kann.
|
Re: Überladen von function geht nicht ?
Hallo.
Zunächst: Es ist nicht möglich Get- und Set-Methoden zu überladen. Sie brauchen bzw. haben immer eindeutige Bezeichner. Dann noch etwas zum Thema "Überladen von Routinen und Methoden": In der Tat ist es so, dass eine überladene Routine bzw. Methode nur anhand ihrer Parameterliste (ihre Signatur) identifiziert werden kann, wenn der Name gleich ist. Nicht anhand ihrer Rückgabe. Der Rückgabewert eine Funktion kann nicht Teil der Signatur sein, wenn man bedenkt, dass Funktionen wie Prozeduren aufgerufen werden können und dar Rückgabewert damit unbeachtet bleibt also auch nicht für einen Signaturvergleich herhalten kann. Hier ist ein kleines Beispiel:
Delphi-Quellcode:
Gruß,
function F(const X: Integer):Integer; overload;
begin Result:=X+1; end; function F(const X: Extended): Extended; overload; begin Result:=X-1; end; ... var ExtendedX: Extended; IntegerX: Integer; Y: Extended; begin ExtendedX:=5; IntegerX:=5; { Verschiedene Aufrufvarianten, welche Funktion wird wohl verwendet werden? - Immer nach dem Grundsatz der Signatur, also der Parameterliste entscheiden. } Y:=F(IntegerX); // Y:=6; Y:=F(ExtendedX); // Y:=4; F(IntegerX); // vernachlässigte Rückgabe: 6 F(ExtendedX); // vernachlässigte Rückgabe: 4 IntegerX:=F(Y); // Compiler-Fehler: Inkompatible Typen 'Integer' und 'Extended' end; Panthrax. [edit=Panthrax]Zahlendreher im Beispiel[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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