TheBest Geschrieben 15. April 2006 Geschrieben 15. April 2006 Hi, ich habe mir jetzt das Thema Listen angeeignet und wollte wissen ob man dieses Programm als Listenprogramm bezeichnen kann und ob es noch Verbesserungsvorschläge gibt??? #include<iostream> #include<string> using namespace std; class CListe { public: char Name[50]; CListe* next; void Eingabe(); void Ausgabe(); }; void CListe::Eingabe() { cout<<"Bitte Namen eingeben: "; cin>>Name; } void CListe::Ausgabe() { cout<<"Die eingegebenen Namen: "<<Name<<endl; } int main() { CListe* neu; neu=new CListe; neu->Eingabe(); neu->next; neu->next=new CListe; neu->next->Eingabe(); neu->next->next=new CListe; neu->next->next->Eingabe(); neu->next->next->Ausgabe(); delete neu->next->next; neu->next->Ausgabe(); delete neu->next; neu->Ausgabe(); delete neu; return 0; } Danke im voraus.... ;)
Guybrush Threepwood Geschrieben 16. April 2006 Geschrieben 16. April 2006 Also ich seh da so nicht viel Sinn drin, denn für gewöhnlich sollte die Listenklasse selbst die Funktionen anbieten um Elemente hinzuzufüge, zu löschen usw.
TDM Geschrieben 17. April 2006 Geschrieben 17. April 2006 Ich würde ein CNode verwenden statt listenelemente auf sich selbst zeigen zu lassen is mir damals mal passiert dass ich auch nur eine Klasse genommen hatte, dann ging aber irgendwie nicht das zurückwärts zählen weil er vom vorletzten immer rückwärts auf das letzte (und nicht auf das erste) gezeigt hat... ansonsten kann ich meinem Vorredner nur zustimmen...
Kratzy974 Geschrieben 27. April 2006 Geschrieben 27. April 2006 Das Beispiel ist eine verkettete Liste. Eine Verkettete Liste benötigt auf jeden Fall entsprechende Construktoren (Copy / Standard) und Operatoren, damit sichergestellt ist, daß immer legale Werte in dem Pointer ist. Jedoch wäre auf jedenfall zu prüfen, ob die STL Klasse "vector" oder "list" in dem Fall besser wären, und eine Klasse, welche die Liste und den Zugriff darauf sichert. Grüße, Kristian Kratzenstein
Sigi Geschrieben 27. April 2006 Geschrieben 27. April 2006 Nebenbei ist das ganze auchn fettes Speicherleck. Bei dir fehlt im dekonstruktor deines CList dings ne Überprüfung ob der Listzeiger darin nen Objekt enthält sonst werden die verketteten nicht mitgelöscht.
Klotzkopp Geschrieben 27. April 2006 Geschrieben 27. April 2006 Nebenbei ist das ganze auchn fettes Speicherleck.Im Beispielcode - so schlecht er sein mag - ist kein Speicherleck. Bei dir fehlt im dekonstruktorDestruktor heißt das Ding. deines CList dings ne Überprüfung ob der Listzeiger darin nen Objekt enthält sonst werden die verketteten nicht mitgelöscht. Ob man so etwas braucht, kommt auf die Implementierung der Listenklasse an - die es hier nicht gibt.
Sigi Geschrieben 27. April 2006 Geschrieben 27. April 2006 Hm stimmt ein delete ist beim lesen wohl untergegangen. Hm dann formulier ich das ganze um: Ich find deine Implementierung relativ unsicher wenn das löschen nicht übernommen wird. Wobei du dann auch aufpassen must, wenn du ein Element in mitten deiner Liste löschen willst, dass du den Zeiger vom alten Object umschiebst. Da fehlt eigentlich recht viel was zu einer _echten_ bzw. _typischen_ Listenimplementierung gehört.
Kratzy974 Geschrieben 27. April 2006 Geschrieben 27. April 2006 Das macht sicherlich den unterschied zwischen struct und class aus. Die Verantwortlichkeit sollte von einer class voll übernommen werden, dh auch Destruktion. Das Beispiel zeigt eine verkettete Liste als struct. Ich weiß, struct == class mit public, aber vom Verständniss aus der C Zeit ist struct eine Datensammlung.
TDM Geschrieben 27. April 2006 Geschrieben 27. April 2006 Also in C geht es auch dass ich Funktionen in ein Struct implementier, somit ist das keine Datensammlung
Klotzkopp Geschrieben 27. April 2006 Geschrieben 27. April 2006 Also in C geht es auch dass ich Funktionen in ein Struct implementierSicher? Zeig mal ein Beispiel.
TDM Geschrieben 27. April 2006 Geschrieben 27. April 2006 struct test { char p; print(){printf("%c", p)}; }
Kratzy974 Geschrieben 27. April 2006 Geschrieben 27. April 2006 Das soll C kompeliert funktionieren (zu dem kleinen Simikolon fehler) ? Ich denke nicht. Als C++ kompeliert funktioniert dies natürlich (wie gesagt struct == class public).
TDM Geschrieben 27. April 2006 Geschrieben 27. April 2006 symikolon war gewohnheit denke aber schon dass es mit c funktioniert... bräuchte nur nen reinen C-Kompiler um das zu testen aber irgendwo hatte ich das mal gelesen edit: gut, das beispiel war falsch... struct wird benutzt um einen zusammengesetzen Datentyp zu erzeugen. Innerhalb der Struktur kann man alle Datentypen geordnet strukturiert verwenden. (In C kann man auch Funktions- zeiger-Variablen verwenden um Funktionen aus C-Strukturen wie aus C++-Klassen aufzurufen. Im Linuxkern sehr oft verwendet.) http://linux-swt.de/oldlswt/lswtpg/c.html
Kratzy974 Geschrieben 27. April 2006 Geschrieben 27. April 2006 Ein C Kompiler : Visual Studio C++ kann einzelne Dateien auch als reines C kompilieren. Grüße.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden