Newsgroup: it.comp.lang.delphi
Titolo: Classi: Funzioni senza parametri?

Com'è possibile che ci siano delle funzioni senza parametri?
Da quanto ne so io (molto poco...) le funzioni si possono scrivere senza
parametri quando sono contenute all'interno di un'altra funzione o procedura
dove le variabili necessarie siano già state dichiarate, ma nell'esempio che
riporto qui sotto (tratto da "Delphi 4" di Kent Reisdorph) non mi sembra che
ci troviamo in questa circostanza:
unit RectU;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
type
{ A simple rectangle class. }
MyRect = class
private
  Left : Integer;
  Top : Integer;
  Right : Integer;
  Bottom : Integer;
  Text : PChar;
public
  function GetWidth : Integer;
  function GetHeight : Integer;
  procedure SetRect(ALeft, ATop, ARight, ABottom : Integer);
  constructor Create;
  constructor CreateVal(ALeft, ATop, ARight, ABottom : Integer);
  destructor Destroy; override;
end;
{ The Create constructor. }
constructor MyRect.Create;
begin
  { Must call the base class' constructor. }
  inherited Create;
  { Set all Values to 0. This isn't strictly necessary }
  { since all class data fields are zeroed by default. }
  Left   := 0;
  Top    := 0;
  Right  := 0;
  Bottom := 0;
  { Allocate memory for the text field. This data field   }
  { isn't actually used, it's just here as an example of  }
  { allocating memory in the constructor and freeing that }
  { memory in the destructor. }
  GetMem(Text, 1024);
end;
{ The CreateVal constructor. }
constructor MyRect.CreateVal(ALeft, ATop, ARight, ABottom : Integer);
begin
  { Call base class constructor. }
  inherited Create;
  { Initialize the data fileds to the values passed in. }
  Left   := ALeft;
  Top    := ATop;
  Right  := ARight;
  Bottom := ABottom;
  { Allocate memory for the text field. }
  GetMem(Text, 1024);
end;
{ Destructor - frees allocated memory. }
destructor MyRect.Destroy;
begin
  { Free the allocated memory. }
  FreeMem(Text);
  { Call the base class destructor. }
  inherited Destroy;
end;
{ GetWidth function - returns the width of the rectangle. }
function MyRect.GetWidth : Integer;
begin
  Result := Right - Left;
end;
{ GetHeight function - returns the height of the rectangle. }
function MyRect.GetHeight : Integer;
begin
  Result := Bottom - Top;
end;
{ SetRect method - assigns new values for the rectangle. }
procedure MyRect.SetRect(ALeft, ATop, ARight, ABottom : Integer);
begin
  Left := ALeft;
  Top  := ATop;
  Right := ARight;
  Bottom := ABottom;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  { Declare two MyRect pointers. }
  Rect1 : MyRect;
  Rect2 : MyRect;
begin
  { Create a MyRect object using the Create constructor. }
  Rect1 := MyRect.Create;
  { Set the values for the rectangle. }
  Rect1.SetRect(50, 50, 250, 250);
  { Create a MyRect object using the CreateVal constructor. }
  { This creates the object and sets the values all at one time. }
  Rect2 := MyRect.CreateVal(0, 0, 100, 100);
  { Show the corresponding rectangle widths and heights in labels. }
  Label1.Caption := 'Rect1 Width: ' + IntToStr(Rect1.GetWidth);
  Label2.Caption := 'Rect1 Height: ' + IntToStr(Rect1.GetHeight);
  Label3.Caption := 'Rect2 Width: ' + IntToStr(Rect2.GetWidth);
  Label4.Caption := 'Rect2 Height: ' + IntToStr(Rect2.GetHeight);
  { Free the memory associated with each MyRect object. }
  { Failure to do this will result in a program that leaks memory. }
  Rect1.Free;
  Rect2.Free;
end;
end.
Altra domanda:
Chi se la sente di fare questo esercizio?
"Scrivere una classe che richiede l'altezza di una persona in pollici e la
restituisce in piedi (1 piede = 12 pollici)"
Ciao
Stefano

dove le variabili necessarie siano già state dichiarate
Falso.
Inoltre, non so se e' legale riportare il testo degli esercizi dei
testi acquistati e comunque la prossima volta riporta solo la
(piccola) parte che ti interessa.
--
Andrea Laforgia - walkietalkie(at)
libero.it
#exclude <windows.h>

 (piccola) parte che ti interessa.
HAi ragione, non ci avevo pensato!
Ciao
Stefano

HAi ragione, non ci avevo pensato!
No problem :)


 tutte quelle variabili definite precedentemente.
Molto chiaro ed esauriente!
Ciao
Stefano