für was sind die da?



  • ..


  • Administrator

    Erhard Henkes schrieb:

    Zum Beispiel kann man die Bitshiftoperatoren zur Ein- und Ausgabe auf der Konsole verwenden 😉

    Diese Mehrfachverwendungen von Zeichen wie >> oder & nehme ich C++ richtig übel.

    LoL *sich das mal bildlich vorstellt, wie ein Erhard eine Sprache anknurrt*
    Aber mal ehrlich, wieso ist das ein Problem? Es ist ja nicht wirklich eine Mehrfachverwendung, sondern eine Operator Überladung. Was willst du mit einem Bitshift Operator bei einer Klasse? Da kannst du ja nichts damit anstellen, also besser für anderes verwenden und es siehst sogar noch schick aus 😉

    Grüssli



  • Erhard Henkes schrieb:

    Diese Mehrfachverwendungen von Zeichen wie >> oder & nehme ich C++ richtig übel.

    Die überladenen Bitshiftoperatoren finde ich okay, aber die Operatoren & (Adresse, Referenz, Bit-Und) und * (Zeigerdeklaration, -dereferenzierung, Multiplikation) ist v.a. am Anfang sehr schwierig zu unterscheiden. Aber wenn man sich daran gewöhnt hat, ist es kein Problem mehr.

    Und sonst, was würdest du machen? Einfach neue Operatoren einführen? Ich denke, C++ besitzt schon genug... (Obwohl natürlich ein >>> lustig aussehen würde ;))


  • Administrator

    Nexus schrieb:

    Und sonst, was würdest du machen? Einfach neue Operatoren einführen? Ich denke, C++ besitzt schon genug... (Obwohl natürlich ein >>> lustig aussehen würde ;))

    Alternativen gibt es schon:

    // Nur als Beispiel!
    #include <iostream>
    
    class CMyOutputStream
    {
      // Attributes //
    private:
      std::ostream m_Output;
    
      // Constructors & Destructor //
    public:
      CMyOutputStream(std::ostream& rOutput)
        : m_Output(rOutput.rdbuf())
      { }
    
      ~CMyOutputStream() { };
    
      // Methods //
    public:
      template<typename T>
      CMyOutputStream& write(T const& rT) { m_Output << rT; return *this; }
    
      template<typename T>
      CMyOutputStream& write_new_line(T const& rT) { m_Output << rT << std::endl; return *this; };
    
      CMyOutputStream& write_new_line() { m_Output << std::endl; return *this; };
    };
    
    int main()
    {
      CMyOutputStream Out(std::cout);
    
      Out.write(3).write(" hello").write_new_line();
      Out.write_new_line("huhu");
    
      return 0;
    }
    

    Grüssli 🙂



  • Aber ob das eine schöne (lesbare) Alternative ist, lassen wir mal aussen vor. 🙂



  • drakon schrieb:

    Aber ob das eine schöne (lesbare) Alternative ist, lassen wir mal aussen vor. 🙂

    Würde ich auch meinen. Ausserdem besteht bei den Streams wohl kaum die Möglichkeit, die Operatoren für BitShifts zu halten. Abgesehen davon kommt man in C++ wahrscheinlich eher selten in die Lage, wo man mit Bitschiebereien hantieren muss, und falls doch, ist der Fall eigentlich immer klar.


  • Administrator

    drakon schrieb:

    Aber ob das eine schöne (lesbare) Alternative ist, lassen wir mal aussen vor. 🙂

    Ich habe ja extra hingeschrieben "// Nur als Beispiel!". Alternativen gibt es genug, das wollte ich eigentlich damit aufzeigen. Mir persönlich gefällt ja die Sache auch mit dem Operator <<, bzw. >>. Wollte es nur aufzeigen, dass es auch anders geht 🙂

    Grüssli



  • Dravere schrieb:

    drakon schrieb:

    Aber ob das eine schöne (lesbare) Alternative ist, lassen wir mal aussen vor. 🙂

    Ich habe ja extra hingeschrieben "// Nur als Beispiel!". Alternativen gibt es genug, das wollte ich eigentlich damit aufzeigen. Mir persönlich gefällt ja die Sache auch mit dem Operator <<, bzw. >>. Wollte es nur aufzeigen, dass es auch anders geht 🙂

    Grüssli

    War nicht böse gemeint. 😉 - Ich finde enifach, dass es schreklich aussieht, aber nichts gegen das Beispiel. Es hat ja ziemlich getroffen. 😉



  • Nexus schrieb:

    Erhard Henkes schrieb:

    Diese Mehrfachverwendungen von Zeichen wie >> oder & nehme ich C++ richtig übel.

    Die überladenen Bitshiftoperatoren finde ich okay, aber die Operatoren & (Adresse, Referenz, Bit-Und) und * (Zeigerdeklaration, -dereferenzierung, Multiplikation) ist v.a. am Anfang sehr schwierig zu unterscheiden. Aber wenn man sich daran gewöhnt hat, ist es kein Problem mehr.

    Und sonst, was würdest du machen? Einfach neue Operatoren einführen? Ich denke, C++ besitzt schon genug... (Obwohl natürlich ein >>> lustig aussehen würde ;))

    Naja, was am Anfang verwirrend ist, ist vielleicht unpraktisch beim lernen, aber >> und << fuer ein/ausgabe ist technisch furchtbar.

    denn stell dir einfach mal eine klasse fuer grosse zahlen vor. und nun definierst du alle bit operationen auf ihr. &, | und natuerlich <<.

    jetzt hast du folgenden code

    myInt c;
    cout<<c<<3;
    cout<<(c<<3);
    

    sieht boese aus 😉



  • @ Shade Of Mine:
    Hm, das hat tatsächlich was. Aber in Anbetracht der Tatsache, dass so ein Fall eher selten vorkommt, finde ich mehrdeutige << trotzdem schöner und praktischer als per .-Operator aneinandergereihte Funktionen... Wenn schon, würde ich in diesem Fall für den BitShift eigene Funktionen schreiben.

    Oder würdest du auch <<< und >>> unterstützen? Ich sollte eine Kampagne starten :p



  • Nexus schrieb:

    Oder würdest du auch <<< und >>> unterstützen? Ich sollte eine Kampagne starten :p

    entweder das oder etwas .NET aehnliches:

    stream.print("Hallo, {0}!", string("nexus"));

    dazu braeuchte man einen ausgabe operator. zB sowas wie toString oder derartiges.

    ka, was am besten ist. op<< ist schon praktisch, aber halt die doppeldeutigkeit ist haesslich.

    stream.print("Hallo, ").print(string("nexus).print("!");
    waere das furchtbarste...


Anmelden zum Antworten