OP-Überladeung



  • Hallo zusammen,
    kann mir evtl. jemand erklären, warum falsche Werte erzeugt werden, wenn ich den Operator Präfix ++ auf das Objekt f2 anwende? Er verwendet beim rechnen die Zahlen des Objekts f1. Mit f3 geht es gut! Wo liegt der Denkfehler?

    Gruss Alex

    #include <iostream>
    using namespace std;
    
    class fraction{
      private:
            long z,n;
    
      public:
            fraction(long z1=0, long n1=1):z(z1),n(n1){};
            void putfractionz(long z1);
            void putfractionn(long n2);
            void getfraction();
    
            fraction operator-(const fraction& re){
                    z=((z*re.n) - (n*re.z));
                    n=n*re.n;
                    return *this;
            }
    
            fraction operator++ (){
                    z+=n;
                    return *this;
            }
            fraction operator-- (){
                    z-=n;
                    return *this;
            }
    };
    
    void fraction::putfractionz(long z1){
             z=z1;
    }
    
    void fraction::putfractionn(long n1){
             n=n1;
    }
    
    void fraction::getfraction(){
            cout << "Zaehler: " << z;
            cout << "\nNenner: " << n;
    }
    
    void main(){
    fraction f1,f2,f3;
    long z1,z2,n1,n2;
    
    cout << "Eingabe des ersten Bruchs";
    cout << "\nEingabe des Bruchs Zaehler: ";
    cin  >> z1;
    f2.putfractionz(z1);
    cout << "Eingabe des Nenners: ";
    cin  >> n1;
    f2.putfractionn(n1);
    cout << endl;
    cout << "Eingabe des zweiten Bruchs";
    cout << "\nEingabe Zaehler: ";
    cin  >> z1;
    f3.putfractionz(z1);
    cout << "Eingabe Nenner: ";
    cin  >> n1;
    f3.putfractionn(n1);
    
    f1 = f2-f3;
    
    cout << "\nAusgabe des Ergebnisses mit -Operator: " <<endl;
    f1.getfraction();
    cout << endl;
    
    ++f2;
    cout << "\nAusgabe des Ergebnisses mit ++Operator: " <<endl;
    f2.getfraction();
    
    --f2;
    cout << "\nAusgabe des Ergebnisses mit --Operator: " <<endl;
    f2.getfraction();
    
    getchar();
    getchar();
    }
    


  • Dein operator- ändert seinen linken Operanden und gibt ihn zurück. Das ist eher unüblich 😉



  • Danke für die schnelle Hilfe

    Grus Alex


Anmelden zum Antworten