Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Überladen von function geht nicht ?

  Alt 15. Nov 2006, 16:34
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:
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;
Gruß,
Panthrax.

[edit=Panthrax]Zahlendreher im Beispiel[/edit]
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat