![]() |
verschiedene Datentypen" zusammenfassen"
Hallo,
ich sitze momentan an einer kleinen Studienarbeit für meinen Info-LK. Wenn sie fertig ist, soll das Programm alle Operationen rund um Binäre- und AVL- Bäume grafisch darstellen. Dazu bin ich dabei eine eigene Unit zu programmieren. Mein Problem ist jetzt aber, dass ich gerne eine Wahlmöglichkeit für die Datentype der Werte hätte. D.h. ob ich den Baum nur mit integer Werten fülle, oder ob ich mit strings arbeite. Nun stehe ich vor dem Problem wie ich das implementieren soll: einfach zwei Units (eine für strings und eine für integer) zu nehmen erdscheint mir doch ein bisschen mit "Kanonen auf Spatzen geschossen". Gibt es irgendwie eine Möglichkeit, einen "Oberdatentyp" zu verwenden, der beide Typen (string und integer) verwendet? Momentan arbeite ich nur mit Strings:
Delphi-Quellcode:
Ich bin mal auf eure Rückmeldungen gespannt.
TDaten = string;
TToKnoten = ^TKnoten; TKnoten = record Daten : TDaten; ToLinks : TToKnoten; ToRechts : TToKnoten end; Vielen Dank, Markus |
Re: verschiedene Datentypen" zusammenfassen"
Wenn du schon mit so arbeitest, nimm doch eine Integerklasse und eine Stringklasse, beide von einer abstrakten Klasse TDatenBasis abgeleitet. Die kannst du dann deinem Knoten zur Laufzeit beliebig zuordnen. Dabei sollte allerdings beachtet werden, dass sich die verschiedenen Typen nicht vermischen, also das ein Knoten mit einem String bestückt ist und ein anderer mit einem Integer, wenn du nur mit Integern arbeitest. Das könnte knallen ;)
|
Re: verschiedene Datentypen" zusammenfassen"
Vielen Dank für die schnelle Antwort!
Sowas in der Art hatte ich mir auch schon gedacht, nur hapert es da bei mir etwas mit der Umsetztung (insbes. Typendeklaration). Man müssta dann halt in jeder Procedure schaun mit welchem typ man gerade arbeitet, aber ansonsten hört sich das net schlecht an... |
Re: verschiedene Datentypen" zusammenfassen"
Wenn du mit den separaten Typen arbeitest, könntest du die Prozeduren, die die Typen bearbeiten, doch gleich in die Klassendeklaration aufnehmen. Dann hättest du die Sicherheit, das nur das getan wird, was getan werden soll und nicht eine Stringoperation auf deinen Integer angewendet wird ;)
|
Re: verschiedene Datentypen" zusammenfassen"
Oder du nimmst Variants als Datentyp. Ja ich weis, dies ist zwar universell aber nicht besonders schnell. Vorteil ist du kannst Integer die als Strings vorliegen denoch sortieren.
Da du ja sowieso ein DEMO Projekt machst würde ich Variants nehmen, da kommts mehr auf Übersichtlichkeit und Strukturierung als auf Performance an. Gruß Hagen |
Re: verschiedene Datentypen" zusammenfassen"
Also, das mit den Variants hört sich zwar interessant an, aber zum einen habe ich da überhaupt keine Ahnung von und eine Einarbeitung scheint mir, nach den was ich bislang gelesen hab, auch net so simpel.
Der Vorschlag von Dax erscheint mir da schon einfacher umzusetzen. Zitat:
|
Re: verschiedene Datentypen" zusammenfassen"
Du hast in jedem Knoten in obigem Code ein Element des Typs TDaten. Dieses änderst du einfach in TDatenBasis um und definierst wie folgt:
Delphi-Quellcode:
In den Rumpf der Klasse fügst du noch die Methoden ein, die du zum arbeiten brauchst. Da du nicht weißt, mit welchen Typ von Daten du arbeiten wirst, definierst du die Methoden als abstract, also ohne Code. Den Code musst du später schreiben, wenn du deine Klasse, z.B. TInteger von der Basisklasse ableitest:
type
TDatenBasis = class public // Eine Beispielmethode procedure Work; virtual; abstract; end;
Delphi-Quellcode:
Weil du in der Basisklasse bereits alle Methoden, die du später brauchst, definiert hast, kannst du ohne umständlicher und eventuell gefährliche Typecasts mit deinen String-, Integer-, Char-, Floating-Point-Klassen usw. arbeiten. Je nach belieben und dem angestrebten Funktionsumfang kannst du beliebig viele dieser Methoden hinzufügen.
type
TInteger = class(TDatenBasis) private fDaten: Integer; public procedure Work; override; end; // Weiteres in der Unit procedure TInteger.Work; begin // Mache was mit fDatan oder anderen Dingen end; PS: Hagens Methode ist viel einfacher. Du deklarierst dein Feld nicht als TDaten, sondern als ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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