AndiE Geschrieben 15. Februar 2009 Geschrieben 15. Februar 2009 Hallo, dieses Beispiel habe ich heute als Testprogramm erstellt. Es zeigt, wie einfach eine (doppelt verkettete) Liste von Klassen mit STL und C++ erstellt werden kann. Ich hatte mich vorher noch nie damit befasst, und ich bin schlichtweg begeistert und erstaunt über die Einfachheit. Vielleicht hilft es auch anderen beim Verständnis. LG Andrè // Objektliste.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #include "stdafx.h" #include <list> #include <iostream> #include <string> using namespace std; class Kunden { public: Kunden(); ~Kunden(); string name; string telefon; }; typedef list<class Kunden> Kundenliste; Kunden::Kunden() {} Kunden::~Kunden() {} int main(int argc, char* argv[]) { int i; Kundenliste liste; Kundenliste::iterator index; Kunden Kunde1; Kunden eintrag; cout << "Name eingeben" <<endl; cin >> Kunde1.name; for (i=0;i<5;i++) liste.push_back( Kunde1); cout << liste.size() << endl; for (index=liste.begin();index!=liste.end();index++) { eintrag=*index; cout << eintrag.name <<endl; } cin >> i; return 0; } Zitieren
Klotzkopp Geschrieben 15. Februar 2009 Geschrieben 15. Februar 2009 Ein paar Anmerkungen: Die Klasse braucht weder Defaultkonstruktor noch Destruktor. Die automatisch generierten tun das Richtige.In C++ deklariert man die Variablen üblicherweise erst dann, wenn man sie braucht, nicht am Anfang des Blocks.Erhöhe den Iterator besser mit Preincrement. Postincrement ist potentiell langsamer, weil es eine Kopie des Iterators anlegen muss. Überhaupt sollte man sich angewöhnen, immer Preincrement zu benutzen, es sei denn, man braucht den besonderen Effekt von Postincrement.Du brauchst kein Objekt der Klasse für die Ausgabe, das geht auch direkt über den Iterator: cout << index->name <<endl; Zitieren
AndiE Geschrieben 15. Februar 2009 Autor Geschrieben 15. Februar 2009 Danke, werde ich mir merken. LG Andrè Zitieren
Wegginho Geschrieben 18. Februar 2009 Geschrieben 18. Februar 2009 Die Klasse braucht weder Defaultkonstruktor noch Destruktor. Die automatisch generierten tun das Richtige. Wieso wird denn in jedem Buch angepriesen, diese selber zu erstellen? Ich find's immer wieder lustig. Klar, ich glaub dir, dass die das richtige tun, aber das ist ja so als wenn in nem Mathebuch steht "Das Zeichen musst du hinschreiben", muss man aber gar nicht.In C++ deklariert man die Variablen üblicherweise erst dann, wenn man sie braucht, nicht am Anfang des Blocks. Ich befinde mich im Moment in der Ausbildung, deshalb möchte ich jetzt nicht das Wort gegen einen erfahrenen C++ Programmierer erheben... :uli ...aber der Code wird um ein Vielfaches einfacher, wenn man die Variablendeklaration in den Kopf packt. Wenn du nach einem Monat auf dein Programm guckst, denkst du dir "okay ... so war das ... ja genau so !". Aber wenn du mal 2 Jahre später von einem Kunden die Anfrage bekommst, da etwas zu erweitern, musst du dich erst wieder 2-3 Stunden einarbeiten, bevor du das verstehst, was du damals gemacht hast. Ich kann jedem nur den Tipp geben, auch wenn's mühsam ist, seinen Code immer zu dokumentieren und "nützliche" Funktionen immer auf nem USB-Stick mit sich rumzuschleppen. Ich fahre mit dieser Strategie seit 3 Jahren super ! :mod: Zitieren
TDM Geschrieben 18. Februar 2009 Geschrieben 18. Februar 2009 ...aber der Code wird um ein Vielfaches einfacher, wenn man die Variablendeklaration in den Kopf packt. Wenn du nach einem Monat auf dein Programm guckst, denkst du dir "okay ... so war das ... ja genau so !". Aber wenn du mal 2 Jahre später von einem Kunden die Anfrage bekommst, da etwas zu erweitern, musst du dich erst wieder 2-3 Stunden einarbeiten, bevor du das verstehst, was du damals gemacht hast. Einfacher nicht, maximal übersichtlicher und das auch nicht immer. Da eine Variable nur innerhalb eines Blockes gilt, muss man halt nur das richtige Verhältnis zwischen Erzeugen/Zerstören des Objektes und Speicherplatzverwendung jenes finden. Das Erstellen aller Variablen im Kopf ist sowieso C-Sache. Zitieren
Klotzkopp Geschrieben 18. Februar 2009 Geschrieben 18. Februar 2009 Wieso wird denn in jedem Buch angepriesen, diese selber zu erstellen?Keine Ahnung, ich habe nicht jedes Buch gelesen. Ehrlich gesagt, erinnere ich mich an keines, in dem dazu geraten wurde, unbedingt Konstruktoren zu erstellen. Kannst du ein Beispiel bringen? Ich befinde mich im Moment in der Ausbildung, deshalb möchte ich jetzt nicht das Wort gegen einen erfahrenen C++ Programmierer erheben... ...aber der Code wird um ein Vielfaches einfacher, wenn man die Variablendeklaration in den Kopf packt. Das ist Ansichtssache, und hängt vermutlich eher davon ab, was man gewöhnt ist. Wenn man von C kommt, wo es (zumindest nach dem Standard von 1989) gar nicht anders geht, kommt einem das Deklarieren von Variablen mitten im Code sicher unübersichtlich vor. Zudem ist es effizienter, Variablen erst dort anzulegen, wo sie gebraucht werden. Im Gegensatz zu C können einfache Variablendeklarationen eine Menge Code erzeugen (Konstruktoren). Wenn man das so spät wie möglich macht (z.B. erst nachdem Prüfungen der Vorbedingungen abgeschlossen sind), kann man viel Zeit sparen. Zitieren
Wegginho Geschrieben 19. Februar 2009 Geschrieben 19. Februar 2009 Klar, habt ihr beide auf jeden Fall recht mit. Da ich ursprünglich aus der VB-Programmierung komme, ist es für mich vielleicht auch einfach ungewohnt, hier Code von von Externen zu bekommen und den nur relativ schwer zu verstehen, weil die Variablen irgendwo im Programm definiert werden. Danke für eure Beiträge 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.