Polimorfizm - orientacja w/g obiektu

0

Witam.

Mam problem z polimorficznym wywołaniem funkcji:

 
function TForm1.Sprawdz(Rownanie:TRownanie;Index:Integer):Boolean;
begin
  if StrToInt(Form1.EWynik.Text)=Rownanie.ObliczWynik(Index) then
  begin                                  
    Form1.PanelInfo.Font.Color:=clGreen;
    Form1.PanelInfo.Caption:='DOBRZE';
    result:=True;
  end else
  begin
    Form1.PanelInfo.Font.Color:=clRed;
    Form1.PanelInfo.Caption:='ŹLE - SPRÓBUJ JESZCZE RAZ';
    result:=False;
  end;
end;

Klasy bazowa i dziedzicząca wyglądają tak:

 
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):Integer;virtual;abstract;
 published

 end;


 TDodawanie = class(TRownanie)
 private

 protected

 public
   constructor Create(IloscDzialan_:Integer;MaxWynik_:Integer); virtual;
   destructor Destroy;
   procedure GenerujLiczby(Min:Integer;Max:Integer);virtual;
   function PokazRownanie(Index:Integer):String;virtual;
   function ObliczWynik(Index:Integer):Integer;virtual;
 end;

//funkcja
function TDodawanie.ObliczWynik(Index:Integer):Integer;
begin
 ShowMessage('function TDodawanie.ObliczWynik(Index:Integer):Integer;');
  result:=Liczba1[Index]+Liczba2[Index]+Liczba3[Index];
end;

Samo wywołanie realizowane jest jak niżej:

 
procedure TForm1.BtSprawdzClick(Sender: TObject);
var
Dodawanie:TDodawanie;

...............................

Form1.Sprawdz(Dodawanie,IndexDzialania-1); //-->> polimorficzne wywolanie funkcji - definicja na samym początku posata

Jest to czysto edukacyjny poglądowy projekt dla opanowania zagadnienia polimorfizmu w Delphi ........ wywala błąd dostępu do pamięci, przekroczenie zakresu
access violation samej funkcji na pewno nie zakresu zmiennych bo to sprawdzałem....... jest chyba jakiś problem z dostępem do samej funkcji, orientacją z którego obiektu ma być wywołana czyli samym polimorfizmem

HELP.

0

Spróbuj tak:

TDodawanie = class(TRownanie)
{...}
public
{...}
  function ObliczWynik(Index: Integer): Integer; virtual; override;
{...}
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1