Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vererbung von Funktionen (https://www.delphipraxis.net/147849-vererbung-von-funktionen.html)

KahPee 17. Feb 2010 16:53


Vererbung von Funktionen
 
Hallo,

ich schlage mich gerade mit der Vererbung von Prozeduren rum.. ich habe eine Vorfahren und eine Nachfahrenklasse.. Nun möchte ich folgendes erreichen. In der Vorfahrenklasse soll eine Prozedur deklariert sein, die etwas bestimmtest macht. Die Nachfahrenklasse soll eine Prozedur enthalten die ZUSÄTZLICH zu der Vorfahrenprozedur noch was macht. Ungefähr so:
Delphi-Quellcode:
type
   Tvorfahr=class
    public
     number:integer;
     function numbertoString(a: integer): String;
   end;

  Tnachfahr=class(vorfahr)
    public
     i:integer;
     function numbertoString(a: integer): String;
   end;


function Tvorfahr.numbertoString(a: integer): String;
begin
  globalvariable1:=globalvariable1+a;
  result:=Inttostr(number);
end;

function Tnachfahr.numberToString(a: integer): String;
begin
  //mache erst das von Tvorfahr (mit selbem "a")

  inc(globalvariable2,a);
  resultvonTvorfahr:=resultvonTvorfahr+'.'+Inttostr(i);
end;
Wenn jetzt folgender Aufruf kommt:
Delphi-Quellcode:
test:=Tnachfahr.create;
s:=test.numbertoString;
Soll nur die zweite Prozedur aufgerufen werden (so wie das normalerweise mit "override" funktioniert") allerdings wird in der ja auf die erste Prozedur zugegriffen, sodass indirekt beide durchlaufen werden.

Ich hab schon verscuht das ergebnis aus verschiedenen TUTs zu kriegen. Wäre nett wenn ihr mein Beispiel mal so anpassen könntet, dass es akzeptiert wird vom Compiler. Ich denke, dann bin ich auch in der Lage, das auf kompliziertere Prozeduren zu übertragen.

Vielen Dank

KahPee

Uwe Raabe 17. Feb 2010 16:57

Re: Vererbung von Funktionen
 
So wie du das programmiert hast, wird TVorfahr.numbertoString gar nicht aufgerufen. Dazu müsstest du in TNachfahr.numbertoString noch ein inherited aufrufen.

himitsu 17. Feb 2010 16:59

Re: Vererbung von Funktionen
 
beim überschreiben auch besser noch so ... siehe OH > virtual bzw. abstact und override
Delphi-Quellcode:
   Tvorfahr=class
    public
     number:integer;
     function numbertoString(a: integer): String; virtual;
   end;

  Tnachfahr=class(vorfahr)
    public
     i:integer;
     function numbertoString(a: integer): String; override;
   end;


function Tnachfahr.numberToString(a: integer): String;
begin
  result := inherited;
  // oder result := inherited numberToString(a);

  inc(globalvariable2,a);
  resultvonTvorfahr:=resultvonTvorfahr+'.'+Inttostr(i);
end;

SirThornberry 17. Feb 2010 17:01

Re: Vererbung von Funktionen
 
zudem fehlt beim fehlt beim vorfahre "virtual" und beim Nachfahren "override". Am besten du schaust dir erst einmal ein Tutorial zur Vererbung an.

mkinzler 17. Feb 2010 17:04

Re: Vererbung von Funktionen
 
Zudem kann man keine Prozeduren sondern nur Methoden vererben :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz