AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Frage beim Vererben, wenn der Datentyp sich ändert.

Frage beim Vererben, wenn der Datentyp sich ändert.

Ein Thema von sarte · begonnen am 4. Mai 2009 · letzter Beitrag vom 4. Mai 2009
Antwort Antwort
sarte

Registriert seit: 23. Mai 2008
Ort: Australien
66 Beiträge
 
Delphi 7 Enterprise
 
#1

Frage beim Vererben, wenn der Datentyp sich ändert.

  Alt 4. Mai 2009, 15:31
Hallo Leute,
ich habe ein kleines Problem beim Vererben.

Delphi-Quellcode:
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;
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^^
Wie macht man das jetzt am Besten?
Sarte
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage beim Vererben, wenn der Datentyp sich ändert.

  Alt 4. Mai 2009, 15:45
Lass mal das virtual bei den Methoden, weg, welche du nicht berschreiben willst.
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Frage beim Vererben, wenn der Datentyp sich ändert.

  Alt 4. Mai 2009, 15:47
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Frage beim Vererben, wenn der Datentyp sich ändert.

  Alt 4. Mai 2009, 17:23
Zitat:
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.
Das ist auch korrekt so. Entweder du vererbst deine Getter oder du mußt beim Aufruf casten. Hier ein Beispiel für die Vererbung:
Delphi-Quellcode:
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;
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.

Gruß oki
42
  Mit Zitat antworten Zitat
sarte

Registriert seit: 23. Mai 2008
Ort: Australien
66 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Frage beim Vererben, wenn der Datentyp sich ändert.

  Alt 4. Mai 2009, 22:04
Vielen Dank
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 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