Operator overlading (Binäeres UND /ODER)



  • Operator Overlaoding?

    Habe schon gegoogelt, aber nicht gutes gefunden:)
    möchte gerne den binärer UND & Operator und binärer ODER | Operator überladen.

    dabei sollte später

    A= B & C;

    A&= B;

    funktionioeren. (das gleiche gild für | )



  • Die Operatoren kannst du überladen wie jeden anderen auch. Am konsistentesten bist du wohl mit folgendem Ansatz:

    class myClass
    {
    public:
      myClass& operator&=(const myClass& rhs)
      {
        //ver-UND-e *this und rhs
        return *this;
      }
    ...
    };
    
    myClass operator &(const myClass& lhs,const myClass& rhs)
    {
      myClass tmp(lhs);
      return tmp&=rhs;
    }
    


  • wenn ich nun den

    operator=(const myClass& rhs);
    

    und

    operator& &(const myClass& lhs,const myClass& rhs)
    

    bruach ich den &= dann noch??



  • CStoll schrieb:

    ...Am konsistentesten bist du wohl mit folgendem Ansatz:...

    UND: Überlade operatoren nur dann und nur genauso, dass JEDER Nutzer spontan die richtige Idee hat, was diese operatoren tun !

    Das sage ich aus eigener seeeehr schlechter Erfahrung - habe mich selbst mal ganz böse im selbst angelegten operatoren-Sumpf verlaufen.... nicht schön, sage ich Dir.
    Fällt unter die Kategorie "Hilt ich damals für eine gute Idee" ... so wie Tokio-Hotel-Tattoos auf der Stirn. 😉

    Gruß,

    Simon2.



  • der user hat keine driekten zugriff auf diese operratorn sie werden indirekt aufgerufen! Sie haben schon den sinn!

    wobei ich auch schreiben könntne

    x.AND(y);
    x.OR(y);
    

    aber den zuweisungsoeprator brauch ich trozdem 🙂



  • BorisDieKlinge schrieb:

    wenn ich nun den

    operator=(const myClass& rhs);
    

    und

    operator& &(const myClass& lhs,const myClass& rhs)
    

    bruach ich den &= dann noch??

    Ja, brauchst du - die Zuweisungsoperatoren sind zwar für die eingebauten Typen so definiert, daß x op= y äquivalent zu x = x op y ist, aber op und op= werden unabhängig voneinander überladen. (btw, der obige Ansatz braucht noch nicht einmal den operator=(), sondern nur den Copy-Ctor)



  • Simon2 schrieb:

    UND: Überlade operatoren nur dann und nur genauso, dass JEDER Nutzer spontan die richtige Idee hat, was diese operatoren tun !

    richtig, man kann ein programm mit operatorenüberladung absolut unlesbar machen.
    deshalb sollte man es sehr bedacht anwenden.
    in den allermeisten fällen kommt man ohne aus.
    🙂



  • BorisDieKlinge schrieb:

    ...
    wobei ich auch schreiben könntne

    x.AND(y);
    x.OR(y);
    

    ...

    Was ein guter Hinweis darauf ist, dass Du die Operatoren "richtig verwendest" ... wenn auch die Begriffe "and" und "or" gut beschreiben, was sie tun.
    (Ich habe damals so schreckliche Sachen damit gemacht, dass ich mich noch 10 Jahre später dafür schäme...)

    Gruß,

    Simon2.


Log in to reply