Gutes Buch für Einstieg in C++?



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das hier ist ganz gut:
    http://www.amazon.de/Accelerated-Practical-Programming-Example-Depth/dp/020170353X/

    Auf deutsch geht sicherlich auch die Schrödinger Variante, die oben in der Werbung auftaucht, aber es ist dann vielleicht auch sinnvoll, eines der Stroustrup Bücher zum Abgleich zu Rate zu ziehen, als Referenz.
    Das neuere Buch vom Stroustrup
    http://www.amazon.de/Einführung-die-Programmierung-mit-C/dp/3868940057/ ist ja auch mehr an total Einsteiger gerichtet und in der C't Kritik über das Buch hieß es, wer viel arbeitet mit dem Buch, viel lernt.
    Wenn dich englische Texte nicht so stören, dann vielleicht auch
    Bruce Eckels "Thinking in C++" angucken.

    Wenn du noch ein paar mehr Beispiele zum Üben brauchst, dann ist auch das hier auf der Seite gelinkte Tutorial sehr hilfreich http://www.c-plusplus.net/tuts/cpp/vcppk.zip allerdings grammatikalisch nicht auf dem neuesten Stand, das muß man dann anpassen.



  • Englische Bücher sind halt so eine Sache, da ich dann mit einer Fremdsprache eine Fremdsprache lernen muss. So gut bin ich in Englisch glaubig nicht, dass ich C++ in Englisch lernen kann.
    Und 70 Euro für ein Buch ist für mich ziemnlich viel.
    Bin noch Schüler und da muss ich schon gucken wie ich rum komme.
    Aber das Angehängte Tutorial schau ich mir mal durch sieht nicht schlecht aus.
    Danke dafür 🙂

    PS: Was haltet ihr von dem Buch:
    http://www.amazon.de/Die--Programmiersprache-Vom-Erfinder-von/dp/3827330467/ref=sr_1_5?ie=UTF8&qid=1339787704&sr=8-5
    kennt das jemand?

    gruß
    Shouu



  • Shouu schrieb:

    ...PS: Was haltet ihr von dem Buch:
    http://www.amazon.de/Die--Programmiersprache-Vom-Erfinder-von/dp/3827330467/ref=sr_1_5?ie=UTF8&qid=1339787704&sr=8-5
    kennt das jemand?...

    Das ist so ziemlich das berühmteste C++ Buch. Jeder C++ Programmierer sollte es auf seinem Schreibtisch stehen haben. Schon alleine um von seinesgleichen mit einem Augenzwinkern erkannt zu werden. 🙂

    Du brauchst dir aber nicht den aktuellsten Nachdruck zu kaufen. Das Buch selbst ist ca. 15 Jahre alt. Die letzte Übersetzung stammt, glaube ich, aus dem Jahr 2000. Danach hat sich nichts mehr getan.

    D.h. diese Bücher haben allesamt denselben Inhalt
    http://www.amazon.de/Die--Programmiersprache-Vom-Erfinder-von/dp/3827330467
    http://www.amazon.de/Die-C--Programmiersprache-Tassenbuch/dp/3827320585
    http://www.amazon.de/-Programmiersprache-Deutsche-Übersetzung-Special-Edition/dp/382731660X

    Das gilt auch für die 2000er Ausgabe der 3. Auflage des Buches
    http://www.amazon.de/Die-C--Programmiersprache-Bjarne-Stroustrup/dp/3827312965
    Siehe:
    http://www.research.att.com/~bs/bs_faq.html#SE

    Es ist aber in einem "akademischen" Stil geschrieben. Stroustrup gibt selbst zu, dass er didaktisch nicht so die Rakete ist. Du brauchst also viel Zeit und Durchhaltevermögen um mit dem Buch Erfolge zu erziehlen.

    In der Literatur gibt es alledings massenweise Querverweise auf dieses Buch bzw. Zitate aus dem Buch, daher schadet es nicht, wenn du es dir für ein paar Kröten gebraucht besorgst und den Rest in ein aktuelles Anfängerbuch steckst (z.B. vom selben Autor).



  • Als schneller aber guter Schnuppereinstieg, wirklich gut, ist auch dieses Script, arme Studies müssen das neben anderen Anforderungen an einem Abend möglichst in einer halben Stunde verstehen. Als Nicht Studi sollte man sich aber etwas mehr Zeit gönnen, die braucht man nämlich für die genannten Werkzeuge und auch um das neue Wissen etwas sacken zu lassen usw. :
    http://wwwmath.uni-muenster.de/num/Vorlesungen/Programmierpraktikum_WS1112/Skript/praesentation_praktikum.pdf



  • @Mitleid:
    Ok vielen Dank für die guten Tipps 😉
    Wie heißen den die Anfängerbücher von dem selben Autor von dennen du gesprochen hast? Kannst du mir da auch welche empfehlen?

    Und danke dir nachtfeuer werde das Skript auf jedenfall mal durch gehen 😉

    gruß
    Shouu



  • nachtfeuer schrieb:

    Als schneller aber guter Schnuppereinstieg, wirklich gut, ist auch dieses Script [...] http://wwwmath.uni-muenster.de/num/Vorlesungen/Programmierpraktikum_WS1112/Skript/praesentation_praktikum.pdf

    Sooo toll finde ich das gar nicht. Besser mal in Accelerated C++ reingucken.



  • Shouu schrieb:

    ...Wie heißen den die Anfängerbücher von dem selben Autor von dennen du gesprochen hast? Kannst du mir da auch welche empfehlen?...

    Das Buch wurde dir bereits weiter oben empfohlen:

    http://www.amazon.de/Einführung-die-Programmierung-mit-C/dp/3868940057/

    Im Moment besteht das Problem, dass vor ca. einem Jahr der neue Standard (C++11) mit nicht gerade weltbewegenden Neuerungen verabschiedet wurde. Fast alle wichtigen Autoren passen also gerade ihre Bücher entsprechend an.

    Stroustrup wird eine Neuauflage seines Buches "The C++ Programming Language" herausbringen:
    http://www.research.att.com/~bs/bs_faq.html#4th

    Lippman hat eine Neuauflage des C++ Primer in Arbeit:
    http://www.amazon.de/C-Primer-Stanley-B-Lippman/dp/0321714113

    Andere Koryphäen haben ihre Standardwerke schon angepasst:
    http://www.amazon.de/The-Standard-Library-Tutorial-Reference/dp/0321623215

    Irgendwo haben wir einen Thread in welchem alle wichtigen C++ Bücher aufgeführt sind.

    Wenn du die neuen Auflagen haben willst, müsstest du halt auf die Bücher bzw. die Übersetzungen warten. Du kannst aber auch mit den alten Auflagen (falls erhältlich, Lippmans C++ Primer ist z.B. ständig ausverkauft) lernen, was auch kein Beinbruch ist.

    Oder du nimmst ein aktuelles Buch von zweitklassigen, aber dennoch soliden Autoren wie Ulrich Breymann
    http://www.amazon.de/Der--Programmierer-Professionell-anwenden-Lösungen/dp/3446426914
    oder dem Ehepärchen Prinz
    http://www.amazon.de/Lernen-professionell-anwenden-mitp-Professional/dp/3826691431

    Je nachdem wie tief du in die Programmiersprache "eintauchen" willst brauchst du sowieso ca. einen 1/2 bis 3/4 Meter an C++ Büchern. 😃



  • krümelkacker schrieb:

    nachtfeuer schrieb:

    Als schneller aber guter Schnuppereinstieg, wirklich gut, ist auch dieses Script [...] http://wwwmath.uni-muenster.de/num/Vorlesungen/Programmierpraktikum_WS1112/Skript/praesentation_praktikum.pdf

    Sooo toll finde ich das gar nicht. Besser mal in Accelerated C++ reingucken.

    Sehe ich auch so. Das ist kein Schnuppereinstieg sondern Zeitverschwendung.



  • Mitleid schrieb:

    krümelkacker schrieb:

    nachtfeuer schrieb:

    Als schneller aber guter Schnuppereinstieg, wirklich gut, ist auch dieses Script [...] http://wwwmath.uni-muenster.de/num/Vorlesungen/Programmierpraktikum_WS1112/Skript/praesentation_praktikum.pdf

    Sooo toll finde ich das gar nicht. Besser mal in Accelerated C++ reingucken.

    Sehe ich auch so. Das ist kein Schnuppereinstieg sondern Zeitverschwendung.

    Das erlärt doch mal bitte etwas genauer.
    Warum sollte sich ein Anfänger keine kleinen Erfolgserlebnisse mit wichtigen Hilfsmitteln gönnen?

    Natürlich kann man auch gleich mit Büchern wie http://www.amazon.de/Modernes-Design-Programmierung-Entwurfsmuster-Professional/dp/3826613473/
    einsteigen, ist ja ein Klacks.

    In gewisser Weise steht C++ in der Tradition von APL (guck mal, noch effektiver) und in der Tradition von Lisp (1001 Dialekt) (1001 Bibliothek) und in der von Linux (ach, kannste nich?) usw.

    Naja, und wenn man schon keinen Zugriff auf die tollen englischsprachigen Texte hat, dann sollte man sich wenigstens etwas Gutes auf deutsch gönnen:
    http://www.amazon.de/Hacking-Die-Kunst-Exploits-mit/dp/3898645363/



  • nachtfeuer schrieb:

    Mitleid schrieb:

    krümelkacker schrieb:

    nachtfeuer schrieb:

    Als schneller aber guter Schnuppereinstieg, wirklich gut, ist auch dieses Script [...] http://wwwmath.uni-muenster.de/num/Vorlesungen/Programmierpraktikum_WS1112/Skript/praesentation_praktikum.pdf

    Sooo toll finde ich das gar nicht. Besser mal in Accelerated C++ reingucken.

    Sehe ich auch so. Das ist kein Schnuppereinstieg sondern Zeitverschwendung.

    Das erlärt doch mal bitte etwas genauer.
    Warum sollte sich ein Anfänger keine kleinen Erfolgserlebnisse mit wichtigen Hilfsmitteln gönnen?

    Das sagt ja keiner. Im Gegenteil. Das von Dir verlinkte Material ist leider eher eine schlechtere Low-Level-Feature-Aufzählung des Sprachkerns. Warum denkst du, dass das gut dazu geeignet wär, Anfängern zu Erfolgserlebnissen zu verhelfen? Sie werden dadurch ja erstmal mit recht unpraktischem Wissen konfrontiert. Von std::string oder std::vector<> sehe ich erstmal ganz lange gar nichts. Aber das sind praktische High-level-Features. Stattdessen sehen wir

    char zeichenkette[] = "Guten Morgen Welt!";
    

    Was nimmt der Leser dabei mit? Was soll er sich unter zeichenkette genau vorstellen? Dann wird später char* im Beispielcode verwendet ohne Erklärungen. Die For-Schleife wird mit

    for ( Zählervariable(n) ; Abbruchbedingung; Veränderung der Zählervariable(n) )

    erklärt. Das Wort "Abbruchbedingung" ist da leider ungeschickt gewählt, da, wenn der Ausdruck im boolschen Kontext true ergibt, die Schleife gerade nicht abgebrochen wird. Weiter:

    const char* dateiname = "ausgabe";
    

    Datentyp als const deklariert heißt: Objekt nachträglich nicht mehr veränderbar.

    Was soll das dem Anfänger sagen? Der weiß ja nicht einmal, dass dateiname ein Zeiger ist. Wie kann er dann wissen, dass sich das const hier auf das gezeigte, nicht aber auf den Zeiger bezieht?

    Weiter können wir sehen:

    int: ganzzahliger Wert, Größe: 2 Byte
    long: ganzzahliger Wert, Größe: 4 Byte

    float: Gleitkommazahl, Größe: 4 Byte
    double: Gleitkommazahl, Größe: 8 Byte
    long double: Gleitkommazahl, Größe: >8 Byte (nicht einheitlich)

    Das hier ist nichts halbes und nichts ganzes. Dadurch, dass er hier sagt "nicht einheitlich" kann er sich ja hier nicht auf eine bestimmte Plattform beziehen. Allerdings ist alles andere auch nicht einheitlich. Wenn er erklären will, was der C++ Standard für diese Typen für Garantien machen will, dann geht das so:

    int: ganzzahliger Wert, kann mindestens die Zahlen -32767...32767 darstellen (typischerweise mehr auf aktuellen Systemen)
    long: ganzzahliger Wert, kann mindestens die Zahlen -2147483647...2147483647 darstellen

    float: Gleitkommazahl, mindestens 6 Dezimalstellen genau
    double: Gleitkommazahl, mindestens 10 Dezimalstellen genau
    long double: Gleitkommazahl, mindestens 10 Dezimalstellen genau (ggf genauer als double, falls die Plattform das unterstützt)

    (Hier sind die 6 bzw 10 signifikantesten Stellen, keine Nachkommastellen gemeint. Und das bezieht sich auch nur auf Zahlen mit Betrag zwischen 1e-37 und 1e+37, da es sonst ggf Unterläufe (denormalisierte Zahlen) oder Überläufe (Infinity) gibt)

    Auch ganz toll:

    #include<iostream>
    using namespace std;
    
    int main()
     {
      int groesse;
      cin >> groesse;
    
      // nicht-dynamischer array:
      double feld[ groesse ];
    
      // dynamischer array::
      double *dynamischesFeld = new double[ groesse ];
    
      // Verhalten komplett gleich:
      for ( int i = 0; i < groesse; i += 1 )
       {
        feld[i] = i;
        dynamischesFeld[i] = i;
        cout << "feld[i] = " << feld[i] << endl;
        cout << "dynamischesFeld[i] = " << dynamischesFeld[i] << endl;
       }
      return 0;
    

    Er tut so, als wäre das legales C++. Ist es aber nicht. new/delete hatte er vorher schonmal erwähnt, aber bei all seinen ungeschickten Dynamische-Felder-Konstruktionen ist gar nichts von delete[] zu sehen.

    Wahnsinn! Auf Seite 98 wird mal std::string verwendet mit der Erklärung "string verhält sich wie char[]". Na supi! Wieso gibt's dann beides?

    Bitte schaut Euch mal Folie 116 an. Ich verstehe absolut nicht, was er mir damit sagen will. Er legt ein Hund-Objekt an und einen Zeiger auf dasselbe Hundobjekt und faselt etwas von Kopierkonstruktoren, dass man die doch überschreiben müsste. WTF?!

    Dann kommt Überatorüberladung am Beispiel der Klasse "Hund" mit hund1+hund2, wobei dieser Operator auch noch den Zustand von hund1 verändert!! WTF?!

    Das mit den virtuellen Funktionen wird auch nicht besonders toll erklärt.

    Die Container der Standardbibliothek kommen ganz am Ende des Kurses dran. WTF?!

    Oh mann! Jetzt, wo ich da nochmal drüber geblätter habe, musste ich feststellen, dass der Kurs noch schlechter ist, als ich zuerst dachte ...

    Gut, das eine oder andere wird Herr Doktor Patrick Henning sicherlich während der Vorlesung noch zusätzlich erklären, aber für zum alleine zu Hause lesen, ohne bei der Vorlesung dabei gewesen zu sein, ist das echt Zeitverschwendung.



  • Erstmal:
    1. Kommt es als Anfänger nicht so genau auf jede Einzelheit an, sondern erstmal ein bißchen auswendiglernen, nachprogrammieren und auf einen grünen Zweig kommen.
    2. Sind Speichergeschichten al la Variable vs [Variable] (und natürlich &Variable) nicht immer einfach zu verstehen, man braucht eine gewissen Zeit, muss es sacken lassen, u.a. kommt man ja auch öfter mal durcheinander z.B. bezüglich Konvertierungen, Typenumwandlungen usw.

    Na klar, man kann bei dem Skript annehmen, dass in der Vorlesung und in Tutorial-Seminaren auch Debuggersessions gemacht werden, um den Code genauer einzuordnen und zu verstehen, da hast du schon recht.

    Eine Zeichenkette sieht im Hexcode nicht viel anderes aus in verschiedenen Programmiersprachen, meistens sieht sie so oder so ähnlich aus:

    1E5B:0200  47 75 74 65 6E 20 4D 6F-72 67 65 6E 20 57 65 6C     Guten Morgen Wel
    1E5B:0210  74 21 20 41 75 73 67 65-73 63 68 6c 61 66 65 6e 3f  t!
    

    Operatorüberladung finde ich gut am Beispiel mit <<, aber dazu müsste man jetzt auch erstmal Shifts verstehen. Allerdings finde ich den Begriff etwas, na sagen wir mal, "technisch überhöht", ..aber ein besser Begriff fällt mir auf die Schnelle jetzt auch nicht ein, Multimeaning, Autosense, ...ambiguousi..das hat aber echt was von künstlicher Intelligenz. Wenn das jetzt Sprachprogramme genausogut könnten, wie der C++ Compiler...Ball...Blatt...ja, ich weiß was gemeint ist...;)



  • nachtfeuer schrieb:

    Erstmal:
    1. Kommt es als Anfänger nicht so genau auf jede Einzelheit an, sondern erstmal ein bißchen auswendiglernen, nachprogrammieren und auf einen grünen Zweig kommen.

    2. Sind Speichergeschichten al la Variable vs [Variable] (und natürlich &Variable) nicht immer einfach zu verstehen, man braucht eine gewissen Zeit, muss es sacken lassen, u.a. kommt man ja auch öfter mal durcheinander z.B. bezüglich Konvertierungen, Typenumwandlungen usw.

    Das alles spricht gegen dein verlinktes Material.

    nachtfeuer schrieb:

    Na klar, man kann bei dem Skript annehmen, dass in der Vorlesung und in Tutorial-Seminaren auch Debuggersessions gemacht werden, um den Code genauer einzuordnen und zu verstehen, da hast du schon recht.

    Wie auch immer: Als einziges Lehrmaterial ist das Material völlig ungeeignet. Es bringt Anfängern Low-Level-Gedöns schlecht bei, und die glauben dann wohl noch, dass "richtiges C++" so aussähe. Es enthält Fehler. Es macht deutlich, dass der Autor C++ nicht verstanden hat (siehe Folie 116). Sorry, da hat ein frisch gebackener Doktor, der sich hauptsächlich mit angewandter Mathematik zu beschäftigen scheint, aufgedrückt bekommen, Studenten C++ beizubringen, obwohl er es selbst nicht kann. Natürlich gibt es besseres Material zum Lernen von C++. Das ist gar keine Frage!

    nachtfeuer schrieb:

    Eine Zeichenkette sieht im Hexcode nicht viel anderes aus in verschiedenen Programmiersprachen, meistens sieht sie so oder so ähnlich aus:

    1E5B:0200  47 75 74 65 6E 20 4D 6F-72 67 65 6E 20 57 65 6C     Guten Morgen Wel
    1E5B:0210  74 21 20 41 75 73 67 65-73 63 68 6c 61 66 65 6e 3f  t!
    

    Relevanz?

    nachtfeuer schrieb:

    Operatorüberladung finde ich gut am Beispiel mit <<, aber dazu müsste man jetzt auch erstmal Shifts verstehen. Allerdings finde ich den Begriff etwas, na sagen wir mal, "technisch überhöht", ..aber ein besser Begriff fällt mir auf die Schnelle jetzt auch nicht ein, Multimeaning, Autosense, ...ambiguousi..das hat aber echt was von künstlicher Intelligenz. Wenn das jetzt Sprachprogramme genausogut könnten, wie der C++ Compiler...Ball...Blatt...ja, ich weiß was gemeint ist...;)

    WTF?!



  • Ist nachtfeuer Patrick Henning? 🤡



  • krümelkacker schrieb:

    Das alles spricht gegen dein verlinktes Material.

    Nicht wirklich.
    Das spricht jetzt eher dafür, wie oberflächlich du an diese Sache herangehst.
    Sich Einzelheiten außerhalb des Zusammenhangs herauspicken und dann im Kreis herumhüppen und rufen, "das ist kein C++, das ist kein C++, das ist blöder halbgarer low-level-scheiß", kann ich auch. Das wirkt auf mich aber kaum seriös, eher religiös. Da macht dann eine Diskussion auch keinen Sinn mehr, so ganz außerhalb der gegebenen Zusammenhänge.]



  • Vielleicht weißt du ja auch einfach nicht, wie man es hätte besser machen können. Schau mal in das Buch "Accelerated C++". Im Vorwort wird genau erklärt, warum was in welcher Reihenfolge drankommt. Da geht es um Produktivität & schnelle Erfolge, die du die Anfänger ja gerne erleben lassen möchtest. Das von dir verlinkte Material entspricht dem Gegenteil dieser Strategie, ist nicht selbsterklärend, zeigt Code welcher kein gültiges C++ ist (es gibt in C++ keine VLAs!), enthält andere Falschaussagen wie "int: Ganzzahl, 2 Bytes", zeigt die Verwendung von new[] ohne eine Spur von delete[], enthält ein sinnfreies Beispiel mit falschen Erklärungen/Schlussfolgerungen (siehe Folie 116). Das reicht mMn vollkommen aus, von dem Material abzuraten; denn es lässt stark an der Kompetenz des Autors in Sachen C++ zweifeln. Da muss ich nicht noch mehr Ungereimtheiten suchen.



  • Oh, an der Uni wollte ich Mathe-Info studieren. Ich hoffe ich muss mir so eine Vorlesung nicht anhören.
    Mit dem Skript würde ich definitiv nicht zu Hause lernen und das auch nicht grad empfehlen.



  • Für absolute Anfänger finde ich als Einstieg z.B.

    http://www.amazon.de/C++-Programmieren-mit-einfachen-Beispielen/dp/3827247705

    ganz gut.



  • Fl0 schrieb:

    Oh, an der Uni wollte ich Mathe-Info studieren. Ich hoffe ich muss mir so eine Vorlesung nicht anhören.
    Mit dem Skript würde ich definitiv nicht zu Hause lernen und das auch nicht grad empfehlen.

    Du wirst an so ziemlich jeder Uni noch viel schlechtere Vorlesungen in Kauf nehmen müssen.


Anmelden zum Antworten