+= operator überladen



  • Hi 🙂

    Ich hätte noch eine Frage zum Überladen vom += Operator.

    Da habe ich folgendes Programm dazu:

    automat.h:

    #ifndef _AUTOMAT_H_
    #define _AUTOMAT_H_
    #include "automat.h"
    
    class Automat {
      private:
        unsigned long geld = 0;
    
      public:
        unsigned long operator+=(unsigned long);
        unsigned long get_geld() const;
    };
    
    #endif
    

    automat.cpp:

    #include "automat.h"
    
    unsigned long Automat::operator+=(unsigned long g) {
      return (geld += g);
    }
    unsigned long Automat::get_geld() const {
      return geld;
    }
    

    main.cpp:

    #include <iostream>
    #include "automat.h"
    using namespace std;
    
    int main(void) {
    
      Automat data01;
      data01+=100;
      cout << data01.get_geld() << endl;
    
      return 0;
    }
    

    Bei diesem Programm kam mir etwas seltsam vor. Dass die += Methode nämlich etwas zurückliefert. Wenn man sich das Hauptprogramm anschaut, sieht man, dass da nichts zurückgegeben wird.

    Darum habe ich automat.h und automat.cpp etwas umgeschrieben (und main.cpp unverändert belassen).

    automat.h:

    #ifndef _AUTOMAT_H_
    #define _AUTOMAT_H_
    #include "automat.h"
    
    class Automat {
      private:
        unsigned long geld = 0;
    
      public:
        void operator+=(unsigned long); // jetzt void
        unsigned long get_geld() const;
    };
    
    #endif
    

    automat.cpp:

    #include "automat.h"
    
    void Automat::operator+=(unsigned long g) {
      geld += g;
    }
    unsigned long Automat::get_geld() const {
      return geld;
    }
    

    Und siehe da, es funktioniert genau so.

    Ist das wirklich nötigt, dass die += Methode einen return hat?



  • Rueckgabewerte koennen ignoriert werden & die Methode muss nichts zurueckgeben. Die Antwort lautet also: Nein.



  • Die normalen += Operatoren (für int, double usw.) geben etwas zurück, also macht man das bei eigenen Typen auch so.



  • Hm, widersprechen sich diese beiden Aussagen? 😕



  • Nein.



  • Es muss nichts zurückgegeben werden, aus Konistenz zu built-ins sollte man aber *this zurückgeben.



  • Aha, ok. Danke 🙂


Log in to reply