type
ClasseUtenti=class
private
NomeUtente: string;
public
costructor Create();
destructor Free();
procedure setUtente(valore: string);
function getUtente(): string;
end;
Constructor ClasseUtenti.Create();
begin
end;
Destructor ClasseUtenti.Free();
begin
end;
procedure ClasseUtenti.setUtente(valore: string);
begin
NomeUtente:=valore;
end;
function ClasseUtenti.getUtente(): string;
begin
getUtente:=NomeUtente;
end;
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp,
{ you can add units after this };
{INIZIO MIO CODICE}
type
ClasseUtenti=class
private
NomeUtente: string;
public
constructor Create();
destructor Free();
procedure setUtente(valore: string);
function getUtente(): string;
end;
{FINE MIO CODICE}
type
{ TMyApplication }
TMyApplication = class(TCustomApplication)
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp; virtual;
end;
{ TMyApplication }
procedure TMyApplication.DoRun;
var
ErrorMsg: String;
app:ClasseUtenti; {VARIABILE DICHIARATA DA ME}
begin
// quick check parameters
ErrorMsg:=CheckOptions('h','help');
if ErrorMsg'' then begin
ShowException(Exception.Create(ErrorMsg));
Terminate;
Exit;
end;
// parse parameters
if HasOption('h','help') then begin
WriteHelp;
Terminate;
Exit;
end;
{ add your program here }
{
dopo aver dichiarato una variabile di nome app di tipo ClasseUtenti
ora devo far si che a questa variabile venga assegnato uno spazio in
memoria per poterci scrivere dentro e quindi eseguo la riga successiva
dove indico che ad app voglio assegnare NomeClasse.Costruttore
}
app:=ClasseUtenti.Create();
app.setUtente('xinyiman'); {setto la variabile con il nome del mio utente, nel mio caso xinyiman}
writeln('Utente: ',app.getUtente()); {ora vado a stampare a video il nome dell'utente inserito nella classe poco fa}
app.Free(); {ho fatto tutto quello che dovevo con questa variabile app e quindi libero dalla memoria lo spazio che occupa richiamando il distruttore}
// stop program loop
Terminate;
end;
constructor TMyApplication.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
end;
destructor TMyApplication.Destroy;
begin
inherited Destroy;
end;
procedure TMyApplication.WriteHelp;
begin
{ add your help code here }
writeln('Usage: ',ExeName,' -h');
end;
{INIZIO MIO CODICE}
Constructor ClasseUtenti.Create();
begin
end;
Destructor ClasseUtenti.Free();
begin
end;
procedure ClasseUtenti.setUtente(valore: string);
begin
NomeUtente:=valore;
end;
function ClasseUtenti.getUtente(): string;
begin
getUtente:=NomeUtente;
end;
{FINE MIO CODICE}
var
Application: TMyApplication;
begin
Application:=TMyApplication.Create(nil);
Application.Title:='My Application';
Application.Run;
Application.Free;
end.
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp
{ you can add units after this };
{INIZIO MIO CODICE}
type
ClasseUtenti=class
private
NomeUtente: string;
public
constructor Create(); virtual;
destructor Free();
procedure setUtente(valore: string);
function getUtente(): string;
end;
type
AdvClasseUtenti=class(ClasseUtenti)
public
constructor Create(); override; //il termine override significa "calpestare" o "passare sopra" e serve per dire che questo costruttore deve andare a sostituire il costruttore della superclasse
function GetUtenteInverso(): string;
end;
{FINE MIO CODICE}
type
{ TMyApplication }
TMyApplication = class(TCustomApplication)
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp; virtual;
end;
{ TMyApplication }
procedure TMyApplication.DoRun;
var
ErrorMsg: String;
app:AdvClasseUtenti; {VARIABILE DICHIARATA DA ME}
begin
// quick check parameters
ErrorMsg:=CheckOptions('h','help');
if ErrorMsg'' then begin
ShowException(Exception.Create(ErrorMsg));
Terminate;
Exit;
end;
// parse parameters
if HasOption('h','help') then begin
WriteHelp;
Terminate;
Exit;
end;
{ add your program here }
{
dopo aver dichiarato una variabile di nome app di tipo ClasseUtenti
ora devo far si che a questa variabile venga assegnato uno spazio in
memoria per poterci scrivere dentro e quindi eseguo la riga successiva
dove indico che ad app voglio assegnare NomeClasse.Costruttore
}
app:=AdvClasseUtenti.Create();
writeln('Utente: ',app.getUtente()); {ora vado a stampare a video il fatto che non è stato inserito ancora nessun utente}
app.setUtente('xinyiman'); {setto la variabile con il nome del mio utente, nel mio caso xinyiman}
writeln('Utente: ',app.getUtente()); {ora vado a stampare a video il nome dell'utente inserito nella classe poco fa}
writeln('Utente: ',app.GetUtenteInverso()); {ora stampo al contrario il nome dell'utente, funzione che ho aggiunto alla classe figlia}
app.Free(); {ho fatto tutto quello che dovevo con questa variabile app e quindi libero dalla memoria lo spazio che occupa richiamando il distruttore}
// stop program loop
Terminate;
end;
constructor TMyApplication.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
end;
destructor TMyApplication.Destroy;
begin
inherited Destroy;
end;
procedure TMyApplication.WriteHelp;
begin
{ add your help code here }
writeln('Usage: ',ExeName,' -h');
end;
{INIZIO MIO CODICE}
Constructor ClasseUtenti.Create();
begin
Self.setUtente('');
end;
Destructor ClasseUtenti.Free();
begin
end;
procedure ClasseUtenti.setUtente(valore: string);
begin
NomeUtente:=valore;
end;
function ClasseUtenti.getUtente(): string;
begin
getUtente:=NomeUtente;
end;
constructor AdvClasseUtenti.Create();
begin
inherited Create(); //inherited significa ereditato e vuol dire che vado ad eseguire prima il costruttore della super classe e poi il codice di questo costruttore
{ovviamente potevamo escludere la riga sopra che inizia con inherited solo che non avrebbe eseguito il costruttore della superclasse, cosa non necessaria nel nostro esempio, ma fondamentale da sapere per livelli di programmazione un po' più avanzati di questo esempio}
Self.setUtente('NESSUN UTENTE INSERITO'); //la procedura SetUtente l'ho ereditata dalla superclasse
end;
function AdvClasseUtenti.GetUtenteInverso(): string;
var
i: integer;
ret,appoggio: string;
begin
ret:='';
appoggio:=Self.getUtente();
i:=Length(appoggio);
while (i>=0) do
begin
ret:=ret + appoggio[i];
Dec(i); //decremento la variabile i
end;
GetUtenteInverso:=ret;
end;
{FINE MIO CODICE}
var
Application: TMyApplication;
begin
Application:=TMyApplication.Create(nil);
Application.Title:='My Application';
Application.Run;
Application.Free;
end.