rendered paste bodydaten.h ===========================================================================================================#include <iostream>using namespace std;#ifndef DATEN_H_#define DATEN_H_class Daten{ private: int iwert; public: Daten (int iVal): iwert(iVal) { cout << "Objekt [Daten] erzeugt\n"; } ~Daten(){} int vergleichen(const Daten&); // Referenz void anzeigen() const;};class Knoten{ public: Knoten(){} virtual ~Knoten(){} virtual Knoten* einfuegen(Daten* d) = 0; virtual void anzeigen() = 0;};class EndKnoten : public Knoten{ public: EndKnoten() { cout << "Objekt [EndKnoten] erzeugt\n"; } ~EndKnoten(){} Knoten* einfuegen(Daten* d); void anzeigen(){};};class AnfangsKnoten : public Knoten{ private: Knoten* next; public: AnfangsKnoten() { next = new EndKnoten; cout << "Objekt [AnfangsKnoten] erzeugt\n"; } ~AnfangsKnoten(){} Knoten* einfuegen(Daten* d); void anzeigen();};class AllgemeinerKnoten : public Knoten{ private: Daten* daten; Knoten* next; public: AllgemeinerKnoten(Daten* d, Knoten* n): daten(d), next(n) { cout << "Objekt [AllgemeinerKnoten] erzeugt\n"; } ~AllgemeinerKnoten() { delete next; delete daten; } Knoten* einfuegen(Daten* d); void anzeigen();};class Liste { private: AnfangsKnoten *anfang; public: Liste() { anfang = new AnfangsKnoten; } ~Liste() { delete anfang; } void einfuegen(Daten* d) { anfang->einfuegen(d); } void alles_anzeigen() { anfang->anzeigen(); }};int Daten::vergleichen(const Daten& d){ if(iwert > d.iwert) { return 1; } if(iwert < d.iwert) { return -1; } return 0;}void Daten::anzeigen() const{ cout << iwert << '\n';}void AnfangsKnoten::anzeigen(){ next->anzeigen();}void AllgemeinerKnoten::anzeigen(){ daten->anzeigen(); next->anzeigen();}Knoten* AnfangsKnoten::einfuegen(Daten* d){ next = next->einfuegen(d); return this;}Knoten* EndKnoten::einfuegen(Daten *d){ AllgemeinerKnoten* daten = new AllgemeinerKnoten(d, this); return daten;}Knoten* AllgemeinerKnoten::einfuegen(Daten* d){ int ret = daten->vergleichen(*d); switch(ret) { case 1: { AllgemeinerKnoten* dKnoten = new AllgemeinerKnoten(d, this); return dKnoten; } case -1: { next = next->einfuegen(d); return this; } } return this;}#endifdaten.h ENDE ====================================================================================================daten.cpp =======================================================================================================#include "daten.h"int main(void){ Liste elemente; Daten* daten; int iwert; for(;;) { cout << "Wert eingeben (0=Ende): "; if((!(cin >> iwert)) || iwert == 0) { break; } daten = new Daten(iwert); elemente.einfuegen(daten); } elemente.alles_anzeigen(); return 0;}daten.cpp ENDE ==================================================================================================