Alternative zu .toString?



  • Hallo,
    ich schon wieder mit einer neuen Frage. Gibt es die Möglichkeit eines Default-Typs als Rückgabewert eines Objektes?

    MeineTolleKlasseMitID obj("42"); // Objekt mit Initialisierung einer "ID"
    
    String s = obj.toString(); // das geht..
    
    String s = obj; // das würde mir noch besser gefallen.
    

    Die Rückgabe als String ist jetzt nur ein Beispiel. Könnte auch irgend ein anderer Typ sein.

    Danke,
    temi



  • Objekte haben keinen Rückgabewert.



  • temi schrieb:

    Hallo,
    ich schon wieder mit einer neuen Frage. Gibt es die Möglichkeit eines Default-Typs als Rückgabewert eines Objektes?

    MeineTolleKlasseMitID obj("42"); // Objekt mit Initialisierung einer "ID"
    
    String s = obj.toString(); // das geht..
    
    String s = obj; // das würde mir noch besser gefallen.
    

    Die Rückgabe als String ist jetzt nur ein Beispiel. Könnte auch irgend ein anderer Typ sein.

    Danke,
    temi

    Du brauchst ein linksassoziative Zuweisung, nach dem Schema:

    Object s = obj; // Objekt kopieren
    String s = obj; // String-Repräsentation basteln
    
    Kann man = in c++ überladen? Wenn ja, sollte das gehen.  :)
    


  • manni66 schrieb:

    Objekte haben keinen Rückgabewert.

    Vielleicht ist es ja auch der falsche Begriff?

    string s1("foo");
    s1.append("bar");
    
    cout << s1 << endl;
    

    "s1" ist doch eine Instanz der Klasse "string", oder?



  • Du kannst für Objekte einer Klasse eine automatische Typkonvertierung überladen.
    https://ideone.com/kR1C5g
    Willst du, dass man das Objekt mit << in einen Stream hineinschreiben kann, überlade besser den operator <<.



  • Fangen wir anders an: warum möchtest du dieses Verhalten überhaupt haben? Implizite Konvertierungen sind oftmals gefährlich. (Ganz abgesehen davon, dass dein Vorhaben möglich ist, indem du in deiner Klasse String den operator= überlädst).

    Dein Beispiel unten mit cout << lässt mich vermuten, dass das vielleicht nur zur Ausgabe haben möchtest. Dann einfach den operator<< überladen.



  • Operator überladen ist das Stichwort, das ich gesucht habe.

    Warum ich das machen möchte? Ich bin faul und will nicht .asString oder .toString zusätzlich schreiben. Bei C# war das relativ simpel (und trotzdem typsicher) und ich habe das öfter mal angewendet, wobei bei C# auch .toString() implizit aufgerufen wurde, was ganz entspannend war.

    cout war wahrscheinlich ein doofes Beispiel, aber auch da passt das Stichwort.

    Ich werden dann wohl der Einfachheit halber bei einer zusätzlichen Methode bleiben, die die Umwandlung und Rückgabe übernimmt.





  • Warum ich das machen möchte? Ich bin faul und will nicht .asString oder .toString zusätzlich schreiben.

    Zumindest ist es ehrlich ^^

    Typecast Operator:

    richtig, damit würde es gehen ....

    Aber es macht Probleme ...
    Warum "typsicherheit", wenn man jeden typ in einen anderen wandeln könnte ???
    Du untergräbst damit einen wichtige Komponente der Programmiersprache.
    Und Faulheit ist an der Stelle ausnahmsweisse mal kein Guter Grund dafür.
    Also die Vorteile der typsicherheit überwiegen da ^^

    Würd ich sowas wiederholt bei meinen Leuten im produktiven code finden, würd ich dringenst zum wechsel zu einer scriptsprache empfehlen ....

    Stream Operator überladen ist davon natürlich nicht betroffen, weil das die Typsicherheit nicht zerstört ...

    Bei C# war das relativ simpel (und trotzdem typsicher)

    Bei C# und VB und so gibts halt das konzept des "Standard" getters ...
    bei c++ hast das nun mal nicht ...


Anmelden zum Antworten