Fragen bezüglich FIFO!
-
Hallo liebe User,
wir haben in der Uni mit Datenstrukturen angefangen.
Uns wurde letzte Woche einige Datenstrukturen wie FIFO vorgestellt.
Nun haben wir eine Uebungsaufgabe bekommen. (Keine Hausaufgabe!!)
Ich habe alles verstanden doch habe trotzdem eine kleine Frage zur Aufgabenstellung.Aufgabe:
Fuer die Speicherung von Kunden sollen Kundenname, Kundennummer und Adresse (Alle als String)in Form eines FIFO abgelegt werden.
Hierfuer werden die Klassen ListenElemente, DatenElemente und Fifo benötigt da der FIFO-Speicher mit Hilfe einer einfach verketteten Liste realisiert wird.a) Erstellen Sie eine Klasse ListenElemente für die Elemente einer einfach verketteten Liste. Diese Klasse enthält Pointer für die Realisierung einer einfach verketteten Liste.
b.) Erstellen Sie die Klasse DatenElemente die von der Klasse ListenElemente abgeleitet wird. Die Abgeleitete Klasse stellt die entsprechenden Variablen bereit: Kundenname, Kundennummer und Adresse
c) Erstellen Sie die Klasse Fifo. Zu realisieren sind die Methoden
void in(ListenElemente * Eintrag)
ListenElemente * out()
bool isEmpty()
ListenElemente * top()Weiterhin hat diese Klasse private Pointer first und last die jeweils auf das erste und letzte Element des FIFOS zeigen.
Das einfachste hab ich bist jetzt:
class ListenElemente{ public: ListenElemente *Next; ListenElemente(){ Next = NULL; } }; class DatenElemente: public ListenElemente{ public: string Name; string KndNr; string Adr; DatenElemente(string N, string K, string A):Name(N), KndNr(K), Adr(A){ } }; class Fifo{ public: ListenElemente *last; ListenElemente *first; Fifo(){ } void in(ListenElemente * Eintrag){ } ListenElemente * out(){ } ListenElemente * top(){ } bool isEmpty(){ } }; int main(int argc, char** argv) { return 0; }
Mein Problem ist nur das ich es komisch finde, dass die Klasse DatenElemente von ListenElemente abgeleitet wird.
Muss es nicht umgekehrt sein?
Also das ListenElemente von DatenElemente abgeleitet wird?Ich weiss wie FIFO funktioniert, aber wie ich es realisieren soll fällt mir ein bisschen schwer.
Kann mir jemand ein Tipp geben oder ne kleine Hilfestellung?
Werd mich freuen wenn mich jemand in die richtige Richtung schubsen könnte!Lg
-
iranii schrieb:
Mein Problem ist nur das ich es komisch finde, dass die Klasse DatenElemente von ListenElemente abgeleitet wird.
Muss es nicht umgekehrt sein?
Also das ListenElemente von DatenElemente abgeleitet wird?Nein, das ist schon richtig. Vielleicht hilft es, die Klassen besser zu benennen. Also ListenElement und KundenInfo. Die KundenInfo kannst du als ListenElement benutzen, aber ein ListenElement ist keine KundenInfo (es fehlt die Info!).
Sinn der Sache ist, dass du die KundenInfo in die Liste reinstecken kannst (weil die KundenInfo ja ein ListenElement ist). Weil KundenInfo von ListenElement erbt, kriegst du von einem Zeiger auf KundenInfo sofort ein ListenElement und das kannst du in die FIFO-Liste reinschieben.
-
iranii schrieb:
Mein Problem ist nur das ich es komisch finde, dass die Klasse DatenElemente von ListenElemente abgeleitet wird.
Muss es nicht umgekehrt sein?
Also das ListenElemente von DatenElemente abgeleitet wird?Das kann man so oder so handhaben. Vererbung bedeutet so viel wie eine "ist ein" Beziehung, also hier "ein Datenelement ist ein Listenelement". Kommt also drauf an, was man hier stärker betonen möchte. In diesem Fall (ein Datenelement ist ein Listenelement) betont man, dass diese Art Datenelement nur in Form einer Liste vorkommen kann, was durchaus eine nachvollziehbare Sichtweise ist. Umgekehrt, ein Listenelement ist ein Datenelement, kann man das durchaus auch sagen (gefällt mir aber an sich weniger als die erste Sichtweise). Dann hätte man betont, dass jedes Listenelement aus Daten besteht.
Ich finde aber beide Sichtweisen deutlich unterlegen gegenüber einer dritten Ansicht: Ein Listenelement hat ein Datenelement. In dieser Sichtweise ist die Funktionalität der Liste und die Funktionalität der Daten logisch getrennt. Die Daten sind Daten, selbst wenn sie nicht in einer Liste sind. Die Liste ist eine Liste und enthält Daten, sie ist nicht aus den Daten zusammen gebaut. Es ist für die Funktion der Liste irrelevant, was die Daten sind; es ist für die Daten irrelevant, in was für einer Datenstruktur sie gespeichert sind.
In Code sähe das so aus:class Listenelement { Datenelement daten; // ... }; // oder besser, da allgemeiner: template <class Datentyp> class Listenelement { Datentyp daten; // ... };