Objekte einer Klasse als Elemente eines Arrays (Anfängerfrage)
-
Hiho,
kurz vorweg: Ich habe bisher fast ausschließlich mit Fortran programmiert und möchte nun erste Gehversuche in C++ machen. Ich bitte daher um Verständnis, falls sich die Frage als trivial herausstellen sollte, aber aus den verschiedenen Tutorials, die ich gelesen habe, konnte ich mir diese Frage leider nicht selbst beantworten.
Folgende Situation:
Ich habe eine Klasse Cpunkt, die als Variablen z.B. die Koordinaten oder Geschwindigkeit des "Punktes" enthält.
Bei vielen Punkten wäre es dann doch sinnfrei viele Objekte wie Punkt1,Punkt2,Punkt3 etc.. zu definieren, sondern ich hätte lieber einen einzigen Array Punkt(i), wobei i eben der Index des jeweiligen Punkt-Objekts der Klasse Cpunkt ist.Wie würde man dafür vorgehen? Gibt es so etwas wie "array of Cpunkt" (glaub so etwas gabs in Delphi) oder steckt man das bereits irgendwie in die Definition der Klasse selbst?
Wie gesagt, auf eigene Faust habe ich das nicht herausfinden können und würde mich über jegliche Hinweise oder hilfreiche Links freuen.
mfg angu
-
Also Arrays gibt es auch in C++.
CPoint points[100]; // 100 Punkte
Üblicherweise benutzt man dazu aber Container, welche dann Array ähnliche oder Listen ähnlich sind. Siehe dazu hier:
http://www.cplusplus.com/reference/stl/Als Anfänger solltest du das aber in einem guten Einsteigerbuch über C++ erfahren.
Eine ganze Reihe von Büchern findest du hier:
http://www.c-plusplus.net/forum/251551Wenn es ein Tutorial sein soll ist, denke ich ist der von Volkard nicht schlecht:
http://www.iks.hs-merseburg.de/~kilian/ak_Dateien/ak_lehre_Dateien/2009_WS/Bioinformatik_VL/Lehrmaterial/C++/Kurs Volkhard Henkel/html/inhalt.html
-
Erstmal: Nenn die Klasse bitte einfach Punkt oder Point, diese C-Präfixe sind gehasst und verpönt.
Du kannst ein Array eines beliebigen Types so erstellen:
Punkt punkte[anzahl];
Allerdings empfehle ich dir einen std::vector, das geht so:
std::vector<Punkt> punkte; punkte.push_back(punkt1); punkte.push_back(punkt2);
Dazu musst du die Datei <vector> einbinden
-
Ja, das ist recht einfach, dafür gibt es den Header
vector
. Dieser enthält das Klassentemplatestd::vector
, welches so etwas wie ein dynamisches Array ist.#include<vector> class Punkt{}; int main() { std::vector<Punkt> foo(5); // foo hat 5 Punkte, foo[0] bis foo[4]. // Man kann auch noch nachträglich die Größe ändern, z.B. etwas anhängen: foo.push_back(Punkt()); // foo hat nun 6 Elemente und der hier erzeugt Punkt ist nun foo[5]. }
std::vector
ist sehr mächtig und bietet noch viel mehr Funktionen, aber ich will dich jetzt nicht überwältigen. aber schau bei Gelegenheit mal in eine Referenz.
-
Huch, das ging ja fix.
Danke schonmal für die Hinweise. Ich probier das mal aus und meld mich bei (wahrscheinlich^^) auftretenden Problemen nochmal.Schönen Abend noch,
mfg angu