Dynamische Objekte erzeugen und in vector speichern



  • Hi!

    Bei folgender Aufgabe weiß ich nicht weiter:

    "Schreiben Sie eine neue Funktion vAufgabe_2(): Lesen Sie die Anzahl der zu erzeugenden PKWs und Fahrräder ein, erzeugen Sie dynamisch entsprechende Objekte der Klassen PKW und Fahrrad. Speichern Sie die Zeiger auf die erzeugten Fahrzeuge in einem vector der STL."

    Nun ja, ich weiß zumindest wie ich dynamische Objekte erzeuge:

    Fahrzeug* test1 = new Fahrzeug("VW Polo",180) //name, speed;
    

    Nun soll das aber über eine Schleife geschehen, ich schätze mal die Objekte müssen automatisiert werden?

    Vielleicht kann mir Jemand spontan helfen? 😃



  • Falsches Unterforum - hier ist C++/CLI, eine .NET Sprache, die ausser ihrer guten Interoperabilität mit C++ nichts zu tun hat. Das C++ Unterforum wäre korrekt.



  • theta schrieb:

    Falsches Unterforum - hier ist C++/CLI, eine .NET Sprache, die ausser ihrer guten Interoperabilität mit C++ nichts zu tun hat. Das C++ Unterforum wäre korrekt.

    Hups, danke! 😃
    Kann man den Thread noch verschieben?



  • Das wird früher oder später ein Moderator machen (leider kann man das nicht selber machen).



  • Zu deinem Problem:

    Es kann zerlegt werden. In a.) Einlesen zweier Zahlen (Anzahl Fahrräder und Anzahl PKW). Und b.) in die Erzeugung der Fahrräder und PKWs in entsprechender Anzahl. Dann c.) speicherst du Zeiger auf die erzeugten Fahrzeuge (welche konkret Fahrräder und PKWs sind) in einem std::vector<Fahrzeug*> ab.

    Löschen (mit delete) nicht vergessen, sobald du die Fahrzeug-Objekte nicht mehr benötigst.

    Zeige doch mal deinen Ansatz für a.).



  • theta schrieb:

    Zu deinem Problem:

    Es kann zerlegt werden. In a.) Einlesen zweier Zahlen (Anzahl Fahrräder und Anzahl PKW). Und b.) in die Erzeugung der Fahrräder und PKWs in entsprechender Anzahl. Dann c.) speicherst du Zeiger auf die erzeugten Fahrzeuge (welche konkret Fahrräder und PKWs sind) in einem std::vector<Fahrzeug*> ab.

    Löschen (mit delete) nicht vergessen, sobald du die Fahrzeug-Objekte nicht mehr benötigst.

    Zeige doch mal deinen Ansatz für a.).

    Habe jetzt folgenden Code geschrieben, wobei vAnlegen() die Klassenmember mit Eingaben belegt:

    int num_pkw = 0;
    	int num_bike = 0;
    	Fahrrad* Fahhrad_pointer;
    	PKW* PKW_pointer;
    	cout << "Zahl der PKW's: \n" << endl;
    	cin >> num_pkw ;
    	cout << "Zahl der Fahrraeder: \n" << endl;
    	cin >> num_bike;
    
    	vector <Fahrzeug*> FahrzeugVektor(num_pkw + num_bike);
    	FahrzeugVektor.clear();
    
    	for (int i = 0; i < FahrzeugVektor.size(); ++i) {	
    		 PKW_pointer = new PKW();
    		 PKW_pointer->vAnlegen();
    		 FahrzeugVektor.push_back(PKW_pointer); 
       }
    
    	for (int j = 0; j < FahrzeugVektor.size(); ++j) {
    		Fahhrad_pointer = new Fahrrad();
    		Fahhrad_pointer->vAnlegen();		
            FahrzeugVektor.push_back(Fahhrad_pointer); 
       }
    


  • Habe jetzt folgenden Code geschrieben, wobei vAnlegen() die Klassenmember mit Eingaben belegt:

    Und, funktioniert es?

    Tips:
    - Du darfst hier auch kompilierbaren Code posten, mit main() und so.
    - Du kannst dir (für dich) Zwischenergebnisse und Variablen ausgeben (z.B. num_pwk oder FahrzeugVector.size() ).
    - Variablen sollen erst so kurz wie möglich vor Gebrauch definiert/initialisiert werden ( num_pwk , num_bike , Fahhrad_pointer , PKW_pointer ).
    - Das was vAnlegen() vermutlich aktuell erledigt, wird normalerweise im Konstruktor erledigt.

    Fragen:
    a) Was ist der Rückgabewert von FahrzeugVektor.size() zwischen Zeile 10 und 11?
    b) Was ist der Rückgabewert von FahrzeugVektor.size() zwischen Zeile 11 und 12?
    c) Wieviele Durchläufe gibt es in der ersten Schleife (ab Zeile 13)?
    d) Wieviele Durchläufe gibt es in der zweiten Schleife (ab Zeile 19)?
    e) Könnte man den FahrzeugVektor zuerst leer lassen, danach num_pwk Schleifendurchläufe machen, dabei jedes Mal ein PKW erzeugen und einfügen?
    f) Könnte man e) analog für num_bike mit Fahrrad machen?

    Gruss und viel Spass
    theta

    Edit: Formatierung angepasst


Anmelden zum Antworten