Operator << für Komplexe zahlen überladen !



  • Ad aCTa schrieb:

    Noch weniger wertvoll: Die friend-Variante passt besser.

    Das ist wiederum Geschmackssache. Mehr oder weniger... Ich hab gelernt, friend so wenig wie möglich zu verwenden, einfach weils die stärkste Kapselungs-Brechstange ist die es überhaupt gibt.



  • Bacid90210 schrieb:

    Hmm ok , verständlich... und wo genau implemetiere ich das ... ???
    eigentlich doch in der Klasse std .. wie erlange Zugriff darauf ??

    doppelt falsch:

    1. std ist ein Namensraum und keine Klasse
    2. hast du da überhaupt keinen Zugriff drauf sondern solltest den Operator im selben namespace wie die Klasse als freien Operator implementieren (google: argument dependent lookup)- oder in dem namespace in dem du ihn benutzen willst.


  • pumuckl schrieb:

    Ad aCTa schrieb:

    Noch weniger wertvoll: Die friend-Variante passt besser.

    Das ist wiederum Geschmackssache. Mehr oder weniger... Ich hab gelernt, friend so wenig wie möglich zu verwenden, einfach weils die stärkste Kapselungs-Brechstange ist die es überhaupt gibt.

    Gilt das auch für meine Lieblinge, die inline-friends wie

    class complex {
       private:
       double re,im;
       public:
       //Konstruktoren und Arithmetik
    
       //Und jetzt kommt er:
       friend ostream& operator <<(ostream& out,const complex& rhs) { 
          return out << rhs.re << " + " << rhs.im << 'i';    
       }
    };
    


  • Warum friend ?
    Wiso eine Referenz auf ostream ?? .... das is zu viel für mich ... 😮

    Wenn mir einer die erste Zeile nochmal erklären könnte wäre ich ihm echt dankbar



  • volkard schrieb:

    Gilt das auch für meine Lieblinge, die inline-friends wie

    Ja - für alle friends, die man ohne übermäßige Kosten vermeiden kann... IIRC wars in einem der Sutter-Bücher wo die Delegation an eine normale Methode delegiert wurde, wie ichs auch im Magazinartikel beschrieben hab:

    std::ostream& X::outputToStream(std::ostream&) const;
    
    std::ostream& operator<<(std::ostream& lhs, X const& rhs)
    {
      return rhs.outputToStream(lhs);
    }
    


  • Bacid90210 schrieb:

    Warum friend ?
    Wiso eine Referenz auf ostream ?? .... das is zu viel für mich ... 😮

    Wenn mir einer die erste Zeile nochmal erklären könnte wäre ich ihm echt dankbar

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010-and-start-is-0.html und folgende



  • Bacid90210 schrieb:

    Warum friend ?
    Wiso eine Referenz auf ostream ?? .... das is zu viel für mich ... 😮

    friend für den zugriff auf private Daten, die Referenz auf ostream zurückliefern, damit man a << b << c << d schreiben kann.
    Das steht allerdings beides in jedem Grundlagenbuch und in jedem besseren Tutorial, vielleicht solltest du dich da nochmal einlesen?



  • Ja das werd ich wohl tun müssen ...

    Danke erstmal für eure Tipps ...



  • pumuckl schrieb:

    volkard schrieb:

    Gilt das auch für meine Lieblinge, die inline-friends wie

    Ja - für alle friends, die man ohne übermäßige Kosten vermeiden kann... IIRC wars in einem der Sutter-Bücher wo die Delegation an eine normale Methode delegiert wurde, wie ichs auch im Magazinartikel beschrieben hab:

    std::ostream& X::outputToStream(std::ostream&) const;
    
    std::ostream& operator<<(std::ostream& lhs, X const& rhs)
    {
      return rhs.outputToStream(lhs);
    }
    

    Das mache ich eigentlich nur, wenn es sein muß, nämlich wenn outputToStream virtuell kommt.



  • Das sehe ich ähnlich wie du, volkard. pumuckl und ich haben die Thematik schon einmal kurz diskutiert, siehe hier.

    Es gibt also durchaus verschiedene Einstellungen gegenüber friend . 😉


Anmelden zum Antworten