Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C++: Objektliste

Empfohlene Antworten

Veröffentlicht

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;

}

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;

  • 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:

...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.

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.