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;
// ...
};