Witam.
Proszę o wytłumaczenie jak to jest, że stworzony obiekt przekazywany do funkcji nie jako referencja (parametr funkcji bez var) jest przekazywany jako oryginał a nie kopia.
W przy standardowych zmiennych funkcja pracuje na kopii zmiennej a tu na oryginale....
Klasa jest standardowa jak poniżej - dziedzicząca z TRownanie
TRownanie = class
private
IloscDzialan:Integer;
MaxWynik:Integer;
Liczba1: array of Integer;
Liczba2: array of Integer;
Liczba3: array of Integer;
Operator:String;
protected
public
constructor Create(IloscDzialan_:Integer); virtual;
destructor Destroy;
procedure GenerujLiczby(Min:Integer;Max:Integer);virtual;abstract;
function PokazRownanie(Index:Integer):String;virtual;abstract;
function ObliczWynik(Index:Integer):Currency;virtual;abstract;
published
end;
TDzielenie = class(TRownanie)
private
protected
public
constructor Create(IloscDzialan_:Integer;MaxWynik_:Integer); virtual;
destructor Destroy;
procedure GenerujLiczby(Min:Integer;Max:Integer);
function PokazRownanie(Index:Integer):String;
function ObliczWynik(Index:Integer):Currency;override;
end;
Deklaracja i tworzenie obiektu:
Dzielenie:TDzielenie;
..... i funkcja która pracuje na oryginale (parametr nie będący referencją bez var)
function Sprawdz(Rownanie:TRownanie;Index:Integer):Boolean; //funkcja poliformiczna
///////////////////////////////////////////////////////////////////////////////////////////
function TForm1.Sprawdz(Rownanie:TRownanie;Index:Integer):Boolean; //funkcja polimorficzna z argumentem typu statycznego obiektu - pracujemy na kopii obiektu
begin
if StrToInt(EWynik.Text)=Rownanie.ObliczWynik(Index) then
begin
Form1.PanelInfo.Caption:='DOBRZE';
REHistoria.SelAttributes.Color:=clGreen;
REHistoria.Lines.Add(LRownanie.Caption+EWynik.Text);
result:=True;
end else
begin
Form1.PanelInfo.Caption:='ŹLE - prawidłowy wynik to: '+CurrToStr(Rownanie.ObliczWynik(Index));
REHistoria.SelAttributes.Color:=clRed;
REHistoria.Lines.Add(LRownanie.Caption+EWynik.Text);
result:=False;
end;
end;