C+++ von A bis Z



  • Hi,

    Ist das Buch C++ von A bis Z wirklich fehlerhaft? So gibt der Author erst an, die Funktion würde "String" zurückgeben und gibt dann doch "const char *" zurück. Das ist ja echt der Wahnsinn.

    lg



  • Das Buch lehrt C mit Klassen. const char* ist ja ein C-String. Hier gab es irgendwo mal einen Thread dazu.



  • 314159265358979 schrieb:

    Das Buch lehrt C mit Klassen. const char* ist ja ein C-String. Hier gab es irgendwo mal einen Thread dazu.

    Zu finden über google c++ jürgen würgen



  • volkard schrieb:

    Zu finden über google c++ jürgen würgen

    C++ Jürgen Wolf auf Rang 7 😮


  • Mod

    yahendrik schrieb:

    volkard schrieb:

    Zu finden über google c++ jürgen würgen

    C++ Jürgen Wolf auf Rang 7 😮

    Und Platz 1 ist "C von A bis Z" (ohne ++). Das sagt alles 🙂 .



  • Stimmt, ist mir gar nicht aufgefallen 😃



  • 314159265358979 schrieb:

    Das Buch lehrt C mit Klassen. const char* ist ja ein C-String. Hier gab es irgendwo mal einen Thread dazu.

    Was soll das heißen. Ich kann doch nicht einen C-String mit einem C++ String gleichsetzen!?

    lg



  • Das Buch ist der pure Schwachsinn. In C++ nutzt man eben std::string statt char*, aber Jürgen Wolf macht das anders. Warum? Weil er keine Ahnung hat. Google Mal nach "C++ Jürgen Wolf", dann kommt bei mir als 5. Link was mit "WARNUNG", was Dich auf einen anderen Thread hier im Forum verweist, in dem detailliert steht, warum das Buch schlecht ist.



  • Es gibt das Konzept "String" (Zeichenkette) und es gibt verschiedene Methoden, dieses Konzept in C++ umzusetzen. Die bekanntesten Möglichkeiten hier sind wohl std::string und char* (zusammen mit den Funktionen der <cstring>). Bei den meisten erfahreneren C++ Programmierern setzt sich übrigens std::string durch (oder Klassen aus der bevorzugten GUI-Bibliothek).



  • Aber Jeffson versucht doch gerade, seine eigene Stringklasse zu schreiben. Da kommt man eben nicht um char-Zeiger herum.
    Und als (sehr gute) Übung solltest du, Jeffson, auch damit weitermachen, bis diese Klasse wie ein std::string zu gebrauchen ist (danach solltest du aber den std::string verwenden).
    In der "C++-Programmiersprache" ist dies bspw. das Ergebnis mehrerer Übungsaufgaben, es wird jedoch von Stroustrup angemerkt, dass für nicht spezialisierte Aufgaben natürlich generell der std::string vorzuziehen ist.



  • Hi,

    Keiner hat mir wirklich sagen können wieso ich const char * mit string gleichsetzen kann.

    lg



  • Nach dem Begriff des "identisch sein" kann man das nicht gleichsetzen, aber man kann einen std::string mit einem const char* initialisieren (was auch implizit geschieht) und man kann einen std::string über die Methode c_str() umwandeln.

    Folgendes geht:

    void machWas(const std::string& str)
    {
        std::cout << str;
    }
    
    int main()
    {
        machWas("Hallo"); // Hallo ist ein const char*
        return 0;
    }
    

    Für Rückgabetypen funktioniert das auch. Man kann z.B. "Hallo" zurückgeben, wenn der Rückgabetyp string ist. Aber mit der Referenz klappt das da nicht.

    String heißt das übrigens nur in Java. Wenn das wirklich so genannt wird, muss man sich fragen, ob das nicht sogar eine andere Klasse ist.



  • Moin,

    schau, wenn du irgendetwas in doppelten Hochkommas schreibst,

    cout << "Hallo Welt";
    

    dann bezeichnet man das als einen String. Und etwas in doppelten Hochkommas hat den Typ const char*.

    Also wenn du nun eine Funktion schreibst, die einen String zurückgibt, dann sieht das eben so aus:

    const char* day()
    {
        return "Heute ist Sonntag";
    }
    

    Nun gibt es ja std::string. Das ist jedoch eine Klasse, die intern einen String verwaltet.

    std::string s( "Heute ist Sonntag" );
    

    lg



  • Jeffson schrieb:

    Keiner hat mir wirklich sagen können wieso ich const char * mit string gleichsetzen kann.

    Wirklich gleichsetzen kannst du das auch nicht. Es sind halt zwei verschiedene Umsetzungen für das selbe Konzept, mehr bleibt unterm Strich nicht übrig.

    "const char*" war in C die übliche Methode, um eine Zeichenkette ("String") darzustellen. Und Autoren wie JW sind wohl der Meinung, daß es verständlicher/notwendig/whatever ist, wenn man es in C++ ebenfalls nutzt - das Resultat ist das, was Pi so treffend als "C mit Klassen" bezeichnet hat.
    "std::string" ist für C++ entwickelt worden, damit sich die Anwender auf den direkten Umgang mit Zeichenketten konzentrieren können, ohne sich mit Details wie Speicherverwaltung und Null-Terminierung beschäftigen zu müssen. Es gibt zwar noch ein paar Ecken im ANSI-Standard, zu denen das noch nicht vorgedrungen ist (z.B. std::fstream), aber die werden weniger.



  • Das Buch "C++ von A bis Z" ist wirklich der Wahnsinn. Wie kann ein Super-Author nur so viele lächerliche Fehler einbauen. Und so was soll C++ von A bis Z sein. Das ist doch nichts anderes als Fehler von A bis Z. Einfach furchtbar.. Wie kann sowas nur publiziert werden. Eine reine Gehirnwäsche



  • Och, Buchtitel und Inhalt -> das kann man noch toppen:
    "C++ in 21 tagen" gibt es auch als PDF.



  • Jeffson schrieb:

    Super-Author

    J.W. ist alles andere als super 🤡


Log in to reply