![]() |
Frage beim Vererben, wenn der Datentyp sich ändert.
Hallo Leute,
ich habe ein kleines Problem beim Vererben.
Delphi-Quellcode:
Wenn ich jetzt mit einer Instanz(vom Typ TAVLKnoten) eine Methode z.b. GetLeft aufrufen möchte, meckert der Compiler, da der Typ nicht von TAVLKnoten ist, sondern TKnoten. Eine Möglichkeit wäre es, gar nicht zu vererben... aber ich bin schreibfaul und möchte gern Vererben^^
type
TKnoten = class protected left: TKnoten; right: TKnoten; Data: Integer; public [...] function GetLeft:TKnoten; virtual; function GetRight:TKnoten; virtual; function GetData:Integer; virtual; end; type TAVLKnoten = class(TKnoten) protected balance: integer; public procedure setBalance(B: Integer); virtual; [...] end; Wie macht man das jetzt am Besten? Sarte |
Re: Frage beim Vererben, wenn der Datentyp sich ändert.
Lass mal das virtual bei den Methoden, weg, welche du nicht berschreiben willst.
|
Re: Frage beim Vererben, wenn der Datentyp sich ändert.
Das Problem wird denke ich eher sein, dass du das Ergebnis der Methode einer Variablen vom Typ TAVLKnoten zuweisen möchtest. Weil prinzipiell geht das - es wird halt nur ein TKnoten zurück gegeben.
Zwei Möglichkeiten: 1) Cast bei der Zuweisung (am besten per as-Operator) 2) Überschreiben der Methode, die die Methode der Basisklasse (TKnoten) incl. Cast ausführt (schöner - viel schöner) Oder aber, wenn du nicht unbedingt oft Zugriff auf Felder von TAVLKnoten brauchst, eine Variable vom Typ TKnoten hernehmen. Dann kannst du später mit is/as dennoch dran kommen. Kommt halt ein wenig auf die weitere Verwendung an. |
Re: Frage beim Vererben, wenn der Datentyp sich ändert.
Zitat:
Delphi-Quellcode:
Diese Variante hat den Vorteil, dass du im weiteren Verwendungscode kein Type-Casting mehr machen musst. Spart Zeit und Probleme. Ich konstruiere so übriegens alle meine speziellen Objektlisten. Hab mir dafür ein Template angelegt und braucht somit beim proggen 3 Sekunden.
type
TKnoten = class protected left: TKnoten; right: TKnoten; Data: Integer; public [...] function GetLeft:TKnoten; function GetRight:TKnoten; function GetData:Integer; end; type TAVLKnoten = class(TKnoten) protected balance: integer; public procedure setBalance(B: Integer); virtual; [...] function GetLeft:TAVLKnoten; end; .... function TAVLKnoten.GetLeft : TAVLKnoten; begin Result := TAVLKnoten(inherited GetLeft); end; Gruß oki |
Re: Frage beim Vererben, wenn der Datentyp sich ändert.
Vielen Dank :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz