operator overloading



  • Hallo,

    wie kann ich den + operator überladen, sodass ich, wenn ich bei einen String etwas anhängen möchte, einfach "Das ist der alte String" + " das sollte zu dem alten String hinzugefügt werden" schreiben kann,
    Und meine 2. frage wäre, wie ich dieses operator- Overloading in meine Klasse einbaue,
    Muss ich die Operator. Überladung in der Header- Klasse meiner Klasse angeben und wie rufe ich dieses Teil dann auf?

    Vielen Dank für Eure Hilfe!

    lg





  • in deiner klasse:

    class Foo{
    [...]
     Foo operator+(const Foo& rhs) const
     {
         [irgendwas machen und _neues_ objekt zurückgeben.]
         //da ich nicht weiß, wie deine stringklasse funktioniert,
         //kann ich dazu nicht mehr sagen.
     }
    };
    

    es bietet sich aber meistens an, eine variante außerhalb der klasse zu wählen zusätzlich oder besser sogar ausschließlich, wenn dieses sinnvoll möglich ist, zu implementieren:

    Foo operator+(const Foo& foo1,const Foo& foo2)
    {
      /*hier über das public-interface bzw. auch über den operator+ von Foo
       die beiden verbinden.*/
    }
    

    die zweite variante hat ein paar vorteil, zum bsp. dass die seite, auf der deine klasse steht, egal ist. wogegen bei dem klasseninternen immer ein passendes objekt links stehen muss. also so etwas

    MyString str;
    " " + str;
    

    ist nur mit der externen variante möglich, da c++ zwar implizite umwandlungen durchführt, aber nicht, um operatoren in einer klasse aufzurufen.
    ein anderer vorteil ist, dass sie für die abi-stabilität der klasse keine rolle spielen und vom design her nicht ganz umwichtig, wenn man sie so sinnvoll implementieren kann, spricht nichts dafür sie in die klasse zu packen.

    zu dem zweiten teil: die müssen natürlich irgendwo deklariert werden, also am besten in einem header. aufrufen ist, wie man beim überladen von operatoren vermuten kann, identisch mit der benutzung von operatoren. du kannst sie natürlich auch explizit mittels operator+(foo,bar) aufrufen, aber das ist reichlich witzlos, da man auch einfach foo+bar schreiben könnte.;)


Anmelden zum Antworten