operator == mit 2 Übergabeparametern geht nicht



  • Strogij schrieb:

    ...mit Keyword friend...

    also das wüsste ich aber 😃
    keyword friend ist nicht verpflichtend



  • Ähm, merke ich auch gerade, sorry. 😉



  • Strogij schrieb:

    Du musst eine globale Funktion dafür machen mit Keyword friend und keine Methode.

    Ich will ja eben nicht, dass das global sein wird. der operator == soll nur für X Objekte gültig sein und möglichst in der Klasse X sein.

    Meinst Du so was wie:

    // Datei: global.h
    #include "X.h"
    bool operator ==(const X& rX1, const X& rX2) const {
       // mach was..
       return true;
    }
    

    Wo soll man nun aber friend verwenden, wenn mein operator keine Klasse gehört?
    In der Klasse X?

    #include "global.h"
    class X {
       friend bool operator ==(const X& rX1, const X& rX2) const;
       // ...
    }
    


  • Wenn er zu keiner Klasse gehört ist der auch mit keiner Klasse befreundet.



  • Die Funktion wird auch nur für X-Objekte(bei dir Referenzen) genutzt, das sieht so aus:

    bool X::operator==(const X& rX1, const X& rX2); // global oder im Namespace, wie auch immer dein Design aussieht
    

    Übrigens: konstante Referenzen?

    Edit: friend wäre dazu da, wenn du in dieser globalen Funktion auf private Elemente zugreifen musst, um einen Vergleich zu machen.



  • Alles klar. Jetzt habe ich's verstanden 🙂
    Danke!



  • Strogij schrieb:

    Übrigens: konstante Referenzen?

    Natürlich. Es ist unüblich, die Argumente von Vergleichsfunktionen zu ändern.


  • Mod

    bool X::operator ==(const X& rX) const;
    

    ist bereits ein binärer operator. du kannst dann entweder schreiben:

    X  x1, x2;
    
      x1 == x2
    
    oder
    
      x1.operator ==( x2 )
    


  • groovemaster schrieb:

    Strogij schrieb:

    Übrigens: konstante Referenzen?

    Natürlich. Es ist unüblich, die Argumente von Vergleichsfunktionen zu ändern.

    Ich schätze mal das Strogij darauf hinaus wollte, dass es sowas wie konstante Referenzen in C++ nicht gibt. Es gibt nur Referenzen-auf-const. Da sich das aber so blöd schreiben lässt, verschlampen aber eigentlich alle diesen feinen Unterschied.



  • Da vorher niemand explizit von "konstanten Referenzen" gesprochen hatte, war meine Vermutung, dass er const in Verbindung mit Referenzen nicht kannte. Wie auch immer. Beides wäre ja damit geklärt.

    HumeSikkins schrieb:

    Es gibt nur Referenzen-auf-const. Da sich das aber so blöd schreiben lässt, verschlampen aber eigentlich alle diesen feinen Unterschied.

    Mach ich eigentlich auch. *schäm* Kann aber auch daher kommen, dass man hin und wieder Typen wie const_reference sieht, anstatt reference_to_const.


Anmelden zum Antworten