Objekte an Funktionen übergeben und diese innerhalb der Funktion verändern



  • Guten Morgen,
    ich hoffe, der Titel ist nicht zu verwirrend.

    Es geht um einen Code der folgenden Struktur:

    #include<iostream>
    
    class Blop {
    
    private:
      int number;
    
    public:
    
      Blop() {
        number = 0;
      }
    
      void increase() { number++; }
    
      int get_number() { return number; }
    };
    
    void doit(Blop b) {
      b.increase();
      b.increase();
    }
    
    int main() {
      Blop b;
      doit(b);
      std::cout << b.get_number();
      return 0;
    }
    

    Ich habe also:
    - eine Klasse Blop, deren Objekte nur einen Integer besitzen, dieser wird zu Beginn 0 gesetzt und kann mittels der Funktion increase() um 1 erhöht und mit get_number() ausgegeben werden.
    - eine Funktion doit(Blop b), die ein Objekt der Klasse Blop bekommt und dann increase() zweimal ausführt.

    Ich erzeuge ein Objekt b der Klasse Blop und führe die Funktion doit(b) aus. Dann sollte die b.number um zwei erhöht worden sein.

    Unerwartetes (für mich) Resultat:
    b.get_number() = 0

    Woran liegt das? Wie kann ich das ändern?
    mfG,
    Matthias K



  • Der Paramenter zur Funktion doit muss ein Zeiger oder vorzugsweise eine Referenz sein, damit er verändert werden kann. 🙂

    [cpp]
    void doit(Blop& b) {
    b.increase();
    b.increase();
    }
    [cpp]



  • void doit(Blop& b) {
    b.increase();
    b.increase();
    }
    

    (Ich hasse diese BB-Tags ;))



  • Hallo

    Dazu gab es gerade erst eine Diskussion. Ich würde an deiner Stelle mit einem Zeiger auf die Klasse arbeiten und diesen übergeben. Ist aber Geschmackssache.

    chrische


Anmelden zum Antworten