And here the code:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {Overloaded routines must be declared with the overload directive} function SumAsStr(a, b :integer): string; overload; //it can be overloaded ... begin Result := IntToStr(a + b) ; end; function SumAsStr(a, b : double): string; overload; //it can be overloaded ... begin Result := FloatToStr(a + b) ; end; function SumAsStr(a, b, c : double): string; overload; //it can be overloaded ... begin Result := FloatToStr(a + b + c) ; end; { OVERLOAD IN LAZARUS Prior to version 1.9 of the compiler,the overloaded functions needed to be in the same unit. Now the compiler will continue searching in other units if it doesn’t find a matching version of an overloaded function in one unit, and if the overload keyword is present. If the overload keyword is not present,then all overloaded versions must reside in the same unit,and if it concerns methods part of a class, they must be in the same class, i.e. the compiler will not look for overloaded methods in parent classes if the overload keyword was not specified. ***GENERALLY OVERLOAD IS USED ON THE SAME CLASS*** } { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := SumAsStr(1,2); Label2.Caption := SumAsStr(1.1,2.2); Label3.Caption := SumAsStr(1.1,2.2,3.3); end; initialization {$I unit1.lrs} end.
It's very simple, isn't it?
That's all for now.
Next time, Object Oriented Programming!
Have fun, see you!