Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe beim Überladen einer Funktion (https://www.delphipraxis.net/12854-hilfe-beim-ueberladen-einer-funktion.html)

Pseudemys Nelsoni 5. Dez 2003 10:18


Hilfe beim Überladen einer Funktion
 
hoiiii

Delphi-Quellcode:
function CountWords(s: string; c: char): integer; overload;
function CountWords(s: string; c: char): string; overload;

wie könnte ich diese funktion überladen? die argumente sind gleich, nur der rückgabetyp ist anders...muss ich die variable in das die funktion das ergbnis gibt etwa mit übergeben? wäre doch sinnlos wenn da ne extra variable dann in den argumenten ist oder?

also wenn jemand n tip hat, bitte posten :)



Edit: achja übrigens, der compiler gibt die fehlermeldung aus:

Zitat:

[Fehler] gcc.pas(9): Deklaration von 'CountWords' unterscheidet sich von vorheriger Deklaration
es soll wohl heissen "unterscheidet sich NICHT von vorheriger Deklaration" naja, die hilfe hat auch genug fehler in der übersetzung :)

choose 5. Dez 2003 10:28

Re: Hilfe beim Überladen einer Funktion
 
Hallo Pseudemys Nelsoni,

selbst wenn Du die Deklaration der Funktionen fehlerfrei hinbekommen solltest, bekommst Du spätestens beim Einsatz mit der "erweiterten Pascal-Syntax" (Funktionen können auch ohne den Rückgabewert zu verwenden, benutzt werden) Probleme, weil der Compiler an der Signatur nicht entscheiden kann, welche Version gemeint ist. Oder kannst Du mir das vielleicht sagen?
Delphi-Quellcode:
var
  myVar: Variant;
begin
  myVar:= CountWords('A sentence with spaces.', #32);
Warum machen die unterschiedlichen Rückgabewerte Sinn?

Argent27 5. Dez 2003 10:46

Re: Hilfe beim Überladen einer Funktion
 
Mach doch kurzerhand eine Prozedur draus !

function CountWords(s: string; c: char): integer; overload;
function CountWords(s: string; c: char): string; overload;

könntest du auch wie folgt abbilden:

procedure CoundWords(s: String; c: Char; var Result : Integer); overload;
procedure CoundWords(s: String; c: Char; var Result : String); overload;

Damit solltest du deinen Weg gehen können.

Gruß
Argent

Pseudemys Nelsoni 5. Dez 2003 11:02

Re: Hilfe beim Überladen einer Funktion
 
hoi^^

Zitat:

Funktionen können auch ohne den Rückgabewert zu verwenden, benutzt werden
daran hab ich nicht gedacht :oops:

Zitat:

Oder kannst Du mir das vielleicht sagen?
nein, kann ich nicht, aber so:

Code:
function CountWords(s: string; c: char; RckgabeWert: string): string; overload;
könnte ich beim aufruf die variable die das ergebnis enthalten soll mit übergeben, ca so:

Code:
s := Countwords('bla;bla2;bla3', ';', s);
Zitat:

Warum machen die unterschiedlichen Rückgabewerte Sinn?
weil ich dann in meinen proceduren etc nicht soviel mit inttostr und strtoint arbeiten muss.




hi² ^^

Zitat:

Mach doch kurzerhand eine Prozedur draus !
habe ich auch schon dran gedacht, werd ich wohl machen :)

choose 5. Dez 2003 11:47

Re: Hilfe beim Überladen einer Funktion
 
Zitat:

Zitat von Pseudemys Nelsoni
Zitat:

Warum machen die unterschiedlichen Rückgabewerte Sinn?
weil ich dann in meinen proceduren etc nicht soviel mit inttostr und strtoint arbeiten muss.

Wenn Du Ausgaberoutinen schreibst, die Strings erwarten, aber häufig Zahlen ausgeben sollen, macht es Sinn, dort einmalig die entsprechende Anpassung durchzuführen, anstatt bei jeder neuen Informationsquelle (CountWords, CountChars, CountBits, ...)
Delphi-Quellcode:
procedure OutputMessage(const AMessage: string);overload;
procedure OutputMessage(const AnInt: Integer);overload;
// etc...
Sieh Dir vielleicht einmal in der OH die Funktion Format an und ziehe in Erwägung, ob Du Deine Ausgaberoutine nicht um eine überladene Version mit
Delphi-Quellcode:
procedure OutputMessage(const AMessage: string; const AParams: array of const);overload;
erweiterst...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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-2025 by Thomas Breitkreuz