operator overload



  • wie schaffe ich es mit den "operator"-befehl
    so was zu machen

    class My{
      int x;
      int y;
      My();
      void setx(int xx);
      void sety(int yy);
    }
    My::My():y(0),y(0){}
    void My::setx(int xx){x=xx;}
    void My::sety(int yy){y=yy;}
    

    an stadt jetzt immer diese set zu schreiben könnte man doch
    irgetn wie so was machen

    class My{
      int x;
      int y;
      My();
      void x operator=(int xx);
      void y operator=(int yy);
    }
    My::My():y(0),y(0){}
    void My::x operator=(int xx){x=xx;}
    void My::y operator=(int yy){y=yy;}
    //oder so ähnlich
    


  • Du meinst also einen Zuweisungsoperator schreiben?

    Normalerweise ist ein solcher Operator in jeder Klasse standardmäßig vorhanden,
    aber ich glaube man braucht für dynamisch erzeugte Objekte einen extra Operator,
    weil dann beide Objekte auf den selben Speicherplatz zeigen.

    Ich schau mal in mein C++-Buch...



  • Yepp,
    du brauchst einen solchen Operator nur für dynamische Objekte.
    Du musst dabei aber überprüfen, ob eine solche Zuweisung wie

    objekt = objekt;
    

    stattfindet. Mit this kannst du das dann abfragen.



  • Hallo

    Nein das geht nicht. Operatoren sind immer von einer Klasse abhängig, nicht von Membervariablen der Klasse.

    bis bald
    akari



  • Du kannst nur genau einen Operator mit gleichem Parameter angeben, nicht mehrere (dies gilt generell für Funktionen).
    Aber zu einen ist deine Syntax falsch, und zum anderen gib mal ein Aufrufbeispiel.
    Was gefällt dir denn an den Set-Funktionen nicht?

    Ich glaube, was du willst sind Eigenschaften (engl. properties), aber diese gibt es in Standard-C++ nicht (aber mit Hilfe von Templates kann man soetwas nachbauen, aber dies ist nichts für Anfänger).



  • Naja was geht:

    class point
    {
        unsigned int m_x;
        unsigned int m_y;
    
    public:
        point(unsigned int x = 0, unsigned int y = 0) : m_x(x), m_y(y) {}
        enum param { x = 0, y };
        unsigned int& operator()(param const& par) { return par == x ? m_x : m_y; }
        unsigned int const& operator()(param const& par) const { return par == x ? m_x : m_y; }
    };
    
    int main()
    {
        point pt(10, 20);
        std::cout << "Point(" << pt(point::x) << "," << pt(point::y) << ")" << std::endl;
        ++pt(point::x);
    }
    

Anmelden zum Antworten