Varibalen im richtigen Objekt ändern



  • Hallo zusammen,

    nach längerer Abstinenz beginne ich wieder mit Programmieren und möcht auch mehr lernen als "nur" ein Programm von oben nach unten durchlaufen zu lassen.
    Beim Arbeiten mit Klassen und Objekten bin ich auf dieses Problem gestossen.

    Ich erstelle hier meine Klasse "Kontor" und lege zwei Objekte "kontora" und "kontorb" an.
    In den Kontoren ist jeweils ein Lager mit Steinen (denkt da einfach mal an Spiele wie ANNO oder Siedler). Diese sind beim Start befüllt. Jetz möchte ich Wählen von welchem Kontor ich Steine abhole und wievel es sein sollen.

    In der Zeile 19 weis ich allerdings im Moment nicht weiter. Hab zwar Bücher und Google bemüht, aber nix passendes gefunden. In Zeile 43 möchte ich wählen von welchem Kontor abgebucht wird aber wie erkläre ich dem Programm nun welches Steinlager ich meine. Ich habs mit "IF" und "CASE" probiert. Das funktioniert auch, natürlich sieht das Programm dann anders aus, aber aus den zwei Kontoren sollen schon mehrere werden und dann wird das eine gewaltige IF Sammlung.

    Würde mich freuen falls jemand hier nen passenden Geistesblitz hat und den teilt.

    Machts gut

    // Zwei Kontoren mit Steinen und abholen
    
    #include <iostream>
    using namespace std;
    
    // Klasse Kontor
    
    class kontor
    {
    public:
    unsigned int steine;				// Steine im Lager ab Programmstart
    };
    
    // Methode der Klasse
    // Steine abbuchen
    
    {
    
    if (kontor_abholen == //Kontorname//) steine = steine - steine_abholen; // da hakts
    
    }
    
    int main ()
    
    {
    
    unsigned int steine_abholen;
    string kontor_abholen;
    int run;
    run = 1;
    
    kontor kontora;
    kontor kontorb;
    
    kontora.steine = 1500;
    kontorb.steine = 2000;
    
    while (run ==1)
    	{
    	cout	<< "kontora: " << kontora.steine
    		<< " kontorb: " << kontorb.steine<<endl;
    
    	cout << "von welchem Kontor abholen (kontora oder kontorb) ?" <<endl;
    	cin >> kontor_abholen;
    	cout << "wieviel Steine abholen ?" <<endl;
    	cin >> steine_abholen;
    	}
    }
    


  • Du brauchst ein Mapping zwischen Kontorname und Kontor Objekt:

    std::unordered_map<std::string, kontor> kontor_map;
    kontor_map["kontora"] = kontora;
    kontor_map["kontorb"] = kontorb;
    // dann nach der Usereingabe:
    kontor_map.at(kontor_abholen).hole_steine_ab(steine_abholen);
    


  • Danke, werd mich mal ins Thema mapping einlesen 🙂



  • Lies dich erstmal ins Thema vector ein.
    Ich glaube nicht, dass du langfristig glücklich wirst, mit dem Weg den du da einschlägst.


Anmelden zum Antworten