Vektor per Schleife mit Klassenobjekten füllen [gelöst]



  • Danke, jetzt habe ich es so einigermaßen kapiert und klappt jetzt auch. Die using´s habe ich durch using namespace std; ersetzt und ich hoffe das mit const und const & kommt noch, genauso wie der sichere Umgang mit Namenskoventionen 🙂 … wenn man sowas im Selbststudium und dicken Wälzern neben sich versucht zu lernen verzweifelt man ab und an …. positiver Effekt allerdings, man vertieft das, was man schon kann, auch wenn es noch sehr wenig ist ☺ …. aber Übung macht ja bekanntlich den Meister ...

    Vielen Dank!!!!


  • Mod

    Ich habe ja jede Menge Abschlüsse, aber noch keinen davon konnte ich als float ausdrücken...

    (Oder die Moral dahinter: Wenn man stets versucht, alles möglichst perfekt zu modellieren - auch und gerade den einfachen Kinderkram - dann fallen einem später die schwierigen Datenmodelle viel leichter)



  • Hallo, das ist jetzt meine Anfänger-Lösung 🙂 ….

    	srand((unsigned)time(NULL)); // Zufallsgenerator initialisieren.
    
    	for (auto z = 0; z < 30; ++z) 
    	{
    	int zufall1 = rand() % 120 + 1;
    	int zufall2 = rand() % 30 + 1;
    	int zufall3 = rand() % 100 + 1;
    	ENEMY Gegner("Gnom", zufall1, zufall2, zufall3);   
    	Armee.push_back(Gegner);
    	}
    

    Das Objekt Gegner der Klasse ENEMY erhält bei der Erstellung bereits über den Konstruktor gewisse Eigenschaften. Armee ist der Vektor.

    DANKE für Eure Hilfen und Hinweise!

    Gegen Verbesserungsvorschläge habe ich natürlich nichts 🙂 ...



  • @Kloeterkong

    for (auto z = 0; z < 30; ++z) 
    {
    	int zufall1 = rand() % 120 + 1;
    	int zufall2 = rand() % 30 + 1;
    	int zufall3 = rand() % 100 + 1;
    	Armee.emplace_back( "Gnom", zufall1, zufall2, zufall3 );
    }
    

    Mit "emplace_back" hast du den Vorteil, dass das Objekt vom Typ "ENEMY" direkt im vector erzeugt wird, anstatt es erst zu erzeugen und dann zu kopieren. Du übergibst einfach nur die Konstruktor-Parameter an die "emplace_back"-Funktion.

    Weitere Verbesserungsvorschläge:

    • aussagekräftigere Variablennamen als "Zufall1", etc.
    • bei Zählschleifen kann man sich ruhig eine nrichtigen Typ gönnen, anstatt es durch "auto" zu erschlagen. In deinem Fall verwendest du "z" nicht weiter, daher ist es egal, aber ich finde es persönlich besser, in dem Fall eben z.B. "unsigned" zu verwenden, wenn du nur im positiven ganzzahligen Bereich arbeitest.
    • Die oberen Grenzwerte für deine Zufallszahlen ( 120, 30, 100 ) könntest du in Konstanten packen, die aussagekräftige Namen haben. Z.B. "MaxDexterity" oder, was auch immer die bedeuten.


  • @Kloeterkong sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    Gegen Verbesserungsvorschläge habe ich natürlich nichts

    Geschlecht sollte kein string sein, sondern ein enum. Du hast eine public Methode 'add' wo jeder bei Geschlecht eintragen kann was er will ('Mann', 'männlich' 'm',...).
    Wenn du dann z.B. mal alle Männer finden sollst, hast du direkt ein Problem.


  • Mod

    @Jockelx sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    @Kloeterkong sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    Gegen Verbesserungsvorschläge habe ich natürlich nichts

    Geschlecht sollte kein string sein, sondern ein enum. Du hast eine public Methode 'add' wo jeder bei Geschlecht eintragen kann was er will ('Mann', 'männlich' 'm',...).
    Wenn du dann z.B. mal alle Männer finden sollst, hast du direkt ein Problem.

    Noch besser wäre, gar keine festen Attribute zu haben, sondern eine flexible Liste von Attributbeschreibungen und zugehörigen Werten. Nicht jede Person auf der Welt wird über die gleichen Attribute beschrieben; hat alle Attribute, die du für wichtig hältst; oder du kennst nicht alle ihre Attribute.

    Attribut Wert
    Vorname Max
    Nachname Mustermann
    Lieblingsfarbe blau
    Anzahl Finger 9

    Das ist aber ziemlich philosophisch zur Datenmodellierung und hilft dir weniger beim Erlernen von C++.



  • @Jockelx sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    Geschlecht sollte kein string sein, sondern ein enum.

    Oha. Darf man sowas heutzutage noch vorschlagen, ohne dafür einen Shitstorm zu ernten? Was, wenn du ein Geschlecht vergessen hast? Oder willst du ein enum { w, m, d, andere, keineAngabe } machen? Wahrscheinlich würde ich versuchen, auf dieses Attribut zu verzichten. Einfach weil es nur Ärger macht. Irgendjemand, und wenn es nur ein Kolleg*in ist, der/die den Code liest, wird sich beleidigt fühlen.


  • Mod

    @wob sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    @Jockelx sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    Geschlecht sollte kein string sein, sondern ein enum.

    Oha. Darf man sowas heutzutage noch vorschlagen, ohne dafür einen Shitstorm zu ernten? Was, wenn du ein Geschlecht vergessen hast? Oder willst du ein enum { w, m, d, andere, keineAngabe } machen? Wahrscheinlich würde ich versuchen, auf dieses Attribut zu verzichten. Einfach weil es nur Ärger macht. Irgendjemand, und wenn es nur ein Kolleg*in ist, der/die den Code liest, wird sich beleidigt fühlen.

    Das ist Anwendungsspezifisch.

    • Die Mitgliederliste deines Buchclubs: Warum fragst du überhaupt?
    • Deine Wahlumfrage: Wichtiges Gruppierungskriterium, das nicht fehlen darf, und wo es hauptsächlich auf die Selbstwahrnehmung des Befragten ankommt.
    • Deine medizinische Humanstudie zur Wirkung eines neuen Medikaments: Frag gar nicht erst, sondern nimm gleich eine Blutprobe.


  • @wob sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    Oha. Darf man sowas heutzutage noch vorschlagen, ohne dafür einen Shitstorm zu ernten?

    Sicher darf man das.
    Ich kann mich nicht erinnern mich jemals irgendwo registriert (oder was auch immer) zu haben und bei "Geschlecht" dann keine Combobox, sondern Freitext ausfüllen zu müssen.



  • @wob sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    @Jockelx sagte in Vektor per Schleife mit Klassenobjekten füllen [gelöst]:

    Geschlecht sollte kein string sein, sondern ein enum.

    Oha. Darf man sowas heutzutage noch vorschlagen, ohne dafür einen Shitstorm zu ernten? Was, wenn du ein Geschlecht vergessen hast? Oder willst du ein enum { w, m, d, andere, keineAngabe } machen? Wahrscheinlich würde ich versuchen, auf dieses Attribut zu verzichten. Einfach weil es nur Ärger macht. Irgendjemand, und wenn es nur ein Kolleg*in ist, der/die den Code liest, wird sich beleidigt fühlen.

    Unerheblich wer sich beleidigt fühlt. Rein rechtlich ist glaube "männlich, weiblich, diverse" absolut in Ordnung. Meine ich mal gelesen zu haben. Und nur die Rechtslage ist maßgeblich. Und das lässt sich prima durch ein enum erschlagen.


Anmelden zum Antworten