Übergabeparameter Operatorüberladung



  • Folgende Aufgabenstellung:

    Durch Operatorüberladung soll ein Konstrukt der Form a/=b möglich werden, wodurch dem Atrribut Ival des Klassenobjekts a das Ergebnis der Integer-Division der Attribute Ival der Klassenobjekte a und b zugewiesen werden soll (also a.Ival=a.Ival/b.Ival)

    Folgender Code:

    #include <iostream>
    using namespace std;

    class Exam {

    private:
    int a,b;
    public:
    void operator /= (???);
    int ival;
    };

    void Exam::operator /=(???)
    {
    a.ival /= b.ival;
    cout << a.ival << endl;

    }

    int main( void ) {

    Exam a,b;
    b.ival=2;
    a.ival/=b;

    a/=b;
    return 0;
    }

    Ich weiß nicht was ich für Übergabeparameter verwenden soll (??)

    Vielen Dank für euer Bemühen



  • statt a.ival/=b; wollt ich natürlich schreiben a.ival=2;





  • Danke für die Antwort und dir auch ein frohes und gesegnetes Fest.

    Ich hab aber immer noch ein Problem:

    wenn ich schreib
    void Exam::operator/=(Exam &x)
    und möchte dort die Rechenoperation ausführen dann brauch ich auch den Wert a.ival oder?

    a/=b; bedeutet das a.operator/=b; wobei operator/= gleich der Funktionsnahme ist und b quasi der übergebene Parameter oder?



  • Naja ich muss dann jetzt mal los.
    Danke für die Hilfe und nochmals allen Frohe Weihnachten!!



  • Ich hab jetzt meinen Fehler selber gefunden.
    Geduld zahlt sich eben aus.
    Falls jemand interessiert hier der Code:

    #include <iostream>
    using namespace std;
    
    class Exam {
    
    public:
      void operator /= (Exam &x);
      int ival; 
    };
    
    void Exam::operator /= (Exam &b)
    {
    	cout << b.ival << endl;
    	ival = b.ival / ival;
    };
    
    int main( void ) {
    
      Exam a,b;
      a.ival=5;
      b.ival=10;
    
    a/= b;
    // Man kann auch a.operator+=(b); schreiben
    //Wichtig!!: dank dem this-Zeiger wird die Adresse 
    // des aktuellen Objekts übergeben
    // des heißt der Wert von Ival der dem a zugeordnet wurde
    // mann kann auch this->ival schreiben muss man aber nicht
    cout << a.ival << endl;
    
       return 0;
    }
    

    /edit pumu: cpp-Tags. Nächstemal bitte selber machen!


Anmelden zum Antworten