Dziedziczenie klas w Delphi - wywołanie przez rodzica procedury z klasy potomka

0

Witam.
Gdzieś mi umknął szczegół i klasy nie chcą współpracować ;).
Chyba, że się nie da no to trudno.

type
   TRodzic = class
   private

   protected
       fCount: Integer;

       procedure Patla();
       procedure RobCos(const aIndex: Integer);
   public
       constructor Create(const ACount: Integer);
       destructor Destroy();override;

   end;

implementation

constructor TRodzic.Create(const ACount: Integer);
begin
    inferited;
end;

destructor TRodzic.Destroy();
begin
  inherited;
end;

procedure TRodzic.Patla();
var j: Integer;
begin
   // Petla oczywiście działa
   for j:= 0 to fCount-1
   do
      RobCos(j);
end;

procedure TRodzic.RobCos(const aIndex: Integer);
begin //
   ShowMessage('Rodzic: wyświetl nr '+IntToStr(aIndex));
end;
type
   TPotomek = class(TRodzic)
   private

   protected

   public
       constructor Create(const ACount: Integer);
       destructor Destroy();override;
   end;

implementation

constructor TPotomek.Create(const ACount: Integer);
begin
    inferited;
end;

destructor TPotomek.Destroy();
begin
  inherited;
end;

procedure TPotomek.RobCos(const aIndex: Integer);
begin
   Inherited;
   // co tu zrobić żeby komunikat się wyświetlił najpierw z rodzica a potem z potomka - razem z aIntex;
   ShowMessage('Potomek: wyświetl nr '+IntToStr(aIndex);  
end;

Celowo w kodzie nie dodaje żadnych virtual, **override **bo ich nie jestem pewny.
W potomku nie daje też Patla() bo może się uda bez.

W skrócie chodzi o to że TPotomek ma wywołać procedurę TRodzic.Petla() która jest stała a ta z kolei ma w pętli wywoływać TPotomek.RobCos() która w zależności od przypadku będzie miała zmienny kod, ale w tym kodzie będzie używany **AIndex ** z rodzica.
Ogólnie założenie jest takie ze to co się powtarza i może być wspólne dla rożnych potomków miało wylądować u TRodzic.

Jeśli ktoś ma pomysł na to to będę wdzięczny za podpowiedź. Szukałem ale nie trafiłem na taki przypadek wiec jeśli się powtarzam to z góry przepraszam.

Edit:
Poprawiłem procedure RobCos();

2

To że nazwałeś klasy TRodzic i TPotomok nie robią z nich rodzica i potomka.

program ideone;

{$mode delphi}

type
   TRodzic=class(TObject)
   private
 
   protected
       fCount: Integer;
 
       procedure Patla();
       procedure RobCos(const aIndex: Integer);virtual;
   public
       constructor Create(const ACount: Integer);
       destructor Destroy();override;
   end;

   TPotomek = class(TRodzic)
   private
 
   protected
       procedure RobCos(const aIndex: Integer);override;
   public
       constructor Create(const ACount: Integer);
       destructor Destroy();override;
   end;
 
constructor TRodzic.Create(const ACount: Integer);
begin
    //inherited;
  fCount:=ACount;
end;
 
destructor TRodzic.Destroy();
begin
  inherited;
end;
 
procedure TRodzic.Patla();
var j: Integer;
begin
   // Petla oczywiÅcie dziaÅa
   for j:= 0 to fCount-1
   do
      RobCos(j);
end;
 
procedure TRodzic.RobCos(const aIndex: Integer);
begin //
  WriteLn('TRodzic.RobCos(',aIndex,')');
end;

constructor TPotomek.Create(const ACount: Integer);
begin
    inherited;
end;
 
destructor TPotomek.Destroy();
begin
  inherited;
end;
 
procedure TPotomek.RobCos(const aIndex: Integer);
begin
   // ten jest uparty i nie chce wyÅwietliÄ komunikatu nie mówiÄc już o parametrze pobieranym z rodzica
   //ShowMessage('nr '+IntToStr(aIndex);  
   WriteLn('TPotomek.RobCos(',aIndex,')');
end;

var p:TPotomek;

begin
  p:=TPotomek.Create(5);
  p.Patla();
  p.Free;
end.

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