"="-Operator



  • Hallo,

    ich habe folgenden Testcode:

    class my_string{
       public:
          my_string(const char*p_string){
             // irgendein Code
          };
          ~my_string(){
             // irgendein Code
          };
          void operator=(const char*){
             // irgendein Code
          };
          // siehe Frage
       private:
          char*memory=0;
    };
    

    Beim "="-Operator kann ich ja folgendes schreiben:

    my_string test("");
    test="test wurde ein Wert zugewiesen";
    

    Jetzt hat ja test den "Wert" test wurde ein Wert zugewiesen.
    Wie kann ich in meiner Klasse nun folgendes realisieren:

    my_string test("");
    test="blablabla";
    std::cout<<test;
    

    Und jetzt sollte auf der Konsole eben die Zeichenkette erscheinen bzw. test soll einen const char* zurückgeben, wenn nur test aufgerufen wird.
    Frage: Wie macht man das? std::string macht das ja auch so.

    Danke im Voraus!

    MfG

    Seikuassi

    P.S.: Ich will std::string nicht neu erfinden! Mir fiel dieser Code spontan gerade so ein. Ich will im Prinzip nur wissen, wie man es realisiert, dass test einen Wert zurückgibt, wenn nur "test" geschrieben wurde.



  • Seikuassi schrieb:

    [/code]
    Und jetzt sollte auf der Konsole eben die Zeichenkette erscheinen bzw. test soll einen const char* zurückgeben, wenn nur test aufgerufen wird.
    Frage: Wie macht man das? std::string macht das ja auch so.

    Nein, std::string macht das nicht so.
    std::string hat eine freie Funktion:

    std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>&, const std::basic_string<CharT, Traits>&);
    

    Dieser Ouptutoperator, oder Printoperator oder Streamoperator macht die Ausgabe.
    Die automatische Konvertierung (die man vermeiden sollte! VERMEIDEN!) geht mit folgende Memberfunktion:

    operator Type() {... return someObjectofType;}
    


  • Hallo Nathan,

    std::string hat eine freie Funktion:

    Okay, dann wende ich die auch an. Die andere Funktion ist meiner Meinung nach auch C-Style,oder? Was für Fehler könnten denn entstehen, wenn man die C-Style-Nummer verwenden würde?

    Danke nochmal!

    MfG

    Seikuassi



  • Seikuassi schrieb:

    Die andere Funktion ist meiner Meinung nach auch C-Style,oder? Was für Fehler könnten denn entstehen, wenn man die C-Style-Nummer verwenden würde?

    Nein, der Konvertierungsoperator ist von C++.
    Und der greift halt drastisch ein und konvertiert Sachen, die man nicht konvertiert haben will.
    Wie nicht explicit Konstruktoren sollte man nicht explicit Konvertierungsoperatoren vermeiden (std::string z.B. hat ja auch eine Funktion c_str() und keinen Operator).



  • Nathan schrieb:

    Dieser Ouptutoperator, oder Printoperator oder Streamoperator

    Oder (stream) insertion operator, damit wir endlich auch einen gebräuchlichen Namen hätten.



  • hustbaer schrieb:

    Nathan schrieb:

    Dieser Ouptutoperator, oder Printoperator oder Streamoperator

    Oder (stream) insertion operator, damit wir endlich auch einen gebräuchlichen Namen hätten.

    https://www.google.de/?gws_rd=cr&ei=J4GCUrfnEYiRtQbi2YCQCQ#q=c%2B%2B+output+operator
    https://www.google.de/?gws_rd=cr&ei=J4GCUrfnEYiRtQbi2YCQCQ#q=c%2B%2B+print+operator
    https://www.google.de/?gws_rd=cr&ei=J4GCUrfnEYiRtQbi2YCQCQ#q=c%2B%2B+stream+operator



  • Ohne "" uninteressant.
    Da ich aber schlau genug war die "" entsprechend nachzurüsten...

    Von mir aus: damit wir endlich auch einen gebraeuchlichen den korrekten Namen hätten.



  • hustbaer schrieb:

    Ohne "" uninteressant.
    Da ich aber schlau genug war die "" entsprechend nachzurüsten...

    Von mir aus: damit wir endlich auch einen gebraeuchlichen den korrekten Namen hätten.

    Von mir aus. 😉


  • Mod

    Das Problem ist, das dieser Operator doch ganz offensichtlich der (Left) Shift-Operator ist. Es hängt vom Kontext ab, wie er heißt? Ist das nicht verwirrend?



  • Klar ist es ein shift operator.
    Nur wenn der erste Parameter ein Output Stream ist nennt man ihn halt auch gerne insertion operator.

    Und wieso sollte es verwirrend sein? Der Name enthält hier Informationen über den Kontext - das ist doch eher informativ als verwirrend.
    (OK, für Anfänger könnte es verwirrend sein. Aber wer interessiert sich schon für Angänger 😃 🤡)


Anmelden zum Antworten