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.... ;) Zitieren
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. Zitieren
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... Zitieren
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 Zitieren
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. Zitieren
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. Zitieren
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. Zitieren
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. Zitieren
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 Zitieren
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. Zitieren
TDM Geschrieben 27. April 2006 Geschrieben 27. April 2006 struct test { char p; print(){printf("%c", p)}; } Zitieren
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). Zitieren
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 Zitieren
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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.