Hilfe bei C++ Studienarbeit Teile 2



  • 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


Anmelden zum Antworten