Hilfe bei C++ Studienarbeit Teile 2
-
Hallo,
ich hab hier schon mal ein Thema erstellt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-183800-and-highlight-is-studienarbeit.htmlIch hab super Tipps bekommen, die ich in der Praxis umsetzen würde. Leider sind in der Studienarbeit die max. Läufer vorgegeben. Also muss ich einen Array mit 500 felder anlegen. Ich versteh leider nachwievor nicht, wie ich ein Objekt über den Konstruktor anlege.
Ich schreib euch mal den Java-Code hin:
Main:
Laeufer la[500]; for(int i=0; i < la.length; i++){ System.out.println("Bitte Namen eingeben:"); String nachname = in.readLine(); usw... la[i] = new Laeufer(nachname, vorname....); }Dieser Java-code ist vielleicht jetzt nicht 100%ig richtig,
aber mir geht es eben darum wie man in C++ folgendes machen
kann:
la[i] = new Laeufer(nachname, vorname....);Mein Ziel ist es ein Objekt über den Konstruktor anzulegen,
in dem ich verschiedene Variablen einlesen lassen kannBitte helft mir in 1 Woche ist Abgabetermin
-
Noch kurz zur Erklärung,
ich hab den Java code hinzugfügt, weil da weiß, wie man
das Problem lösen könnte, aber wiegsagt in C++ ist mir
das noch unklar
-
Nimm doch einen vector
std::vector<Laeufer> la; for(int i=0; i < 500; ++i){ //System.out.println("Bitte Namen eingeben:"); //String nachname = in.readLine(); usw... la.push_back(Laeufer(nachname, vorname....)); }
-
Und halt einen entsprechenden Konstruktor zur Klasse hinzufügen:
class Laeufer { public: Laeufer( const std::string& nachname, const std::string& vorname, uswusw... ) : nachname_( nachname ) , vorname_( vorname ) {} };
-
Wenn du in C++ ein Array als "Laufer la[500];" anlegst, wird bereits für alle Array-Elemente der Default-Ctor ausgeführt (natürlich nur solange du einen hast, andernfalls bekommst du Probleme mit deinem Compiler). Aber später kannst du die Elemente jederzeit überschreiben, um sie "echt" zu belegen:
laufer la[500]; for(int i=0;i<500;++i)//C++ Arrays haben kein 'length' { cout<<"Bitte Namen eingeben:"<<endl; string nachname; cin>>nachname; ... la[i] = Laeufer(nachname, vorname....); }Aber ich würde vermutlich einen vector<> anstelle des Arrays verwenden und die einzelnen Einträge mit push_back() anhängen.
-
jo ok, was hat es denn mit der pushback methode aufsich. Da wird doch eine Objekt erzeugt wenn man es benötigt, oder?
Weil ich hab ja schon vornherein die Objekte festgelegt.
mit Laeufer la[500]. Oder versteh ich das falsch.
Sorry für meine Fragen, aber für mich ist das totales Neuland
-
Ein vector ist standardmäßig beim Anlegen leer, d.h. mit jedem push_back-Aufruf wird das Array um ein Element größer (nach der Schleife hat der vector dann 500 Elemente).
-
class Laeufer { private: string name, vorname; unsigned int laeufer_max; public: Laeufer() { laeufer_max = 500; } void daten_einlesen( ) { cout << "Name ?" << endl; cin >> name; cout << "Vorname ?" << endl; cin >> vorname; } void daten_anzeigen() { cout << "Ich bin Laeufer: " << vorname << " " << name << endl; } }; int main( ) { Laeufer laeufer[500]; laeufer[0].daten_einlesen(); laeufer[1].daten_einlesen(); laeufer[0].daten_anzeigen(); laeufer[1].daten_anzeigen(); return 0; }
-
vector<> wächst mit, wenn es benötigt wird, also mußt du die erwartete Größe nicht einmal angeben. Und mit push_back() wird ein neues Element hinten an den vector angehängt (und seine Größe entsprechend erhöht).
PS: Ich empfehle dir mal einen Blick in meine Artikelserie "Aufbau der STL".
-
Edit: laeufer_max kann weggelassen werden.
-
CStoll schrieb:
PS: Ich empfehle dir mal einen Blick in meine Artikelserie "Aufbau der STL".
Die Zeit wird er wohl kaum noch haben, sich damit zu beschäftigen.

-
Hi Ihr,
dankeschön *g*
ich glaub langsam hab ich es verstanden.
Schöne Grüße
Martin