Overload di funzioni

A volte puo' essere utile utilizzare un medesimo nome per una funzione anche se i parametri passati sono differenti
Per esempio se si vuole incrementare una variabile Integer o extended o, perchč no, stringa possiamo scrivere:

Codice: [Seleziona]
Procedure MyInc(Var Variabile : Integer; Quantita : Integer); Overload;
Procedure MyInc(Var Variabile : Extended; Quantita : Extended); Overload;
Procedure Myinc(Var Variabile : String; Quantita : String); Overload;


e, nella sezione implementation, sviluppiamo le funzioni:

Codice: [Seleziona]
Procedure MyInc(Var Variabile : Integer; Quantita : Integer); 
Begin
  Result := Variabile + Quantita;
End;

Procedure MyInc(Var Variabile : Extended; Quantita : Extended);
Begin
  Result := Variabile + Quantita;
End;

Procedure Myinc(Var Variabile : String; Quantita : String);
Begin
  Result := Variabile + Quantita;
End;


Ora, a seconda del tipo che richiama la funzione, il compilatore assegnerą quella giusta e, quindi, si puo' scrivere:
Codice: [Seleziona]

Var
  A : Integer;
  B : Extended;
  C : String;
Begin
  A := 10;
  B := 11.121;
  C := 'Ciao';
 
  MyInc(A, 1);
  MyInc(B, 1.2);
  MyInc(C, ' mondo');
 
  ............................
   A questo punto avremo
     A = 11;
     B = 12.321;
     C = 'Ciao mondo';
  ............................
End;


Tenete presente che comanda il tipo e quindi le dichiarazioni

Codice: [Seleziona]
Procedure MyInc(Var Valore : Integer; Quantita : Integer); Overload;
Procedure MyInc(Var Pippo : Integer; Quantita : Integer); Overload;


non sono valide in quanto i tipi sono identici; non sono valide neanche le dichiarazioni con tipi non assegnati:

Codice: [Seleziona]
Procedure MyInc(Var Valore : Integer; Quantita : Integer); Overload;
Procedure MyInc(Var Pippo; Quantita : Integer); Overload;



SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article