Gutes Buch für Einstieg in C++?
-
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#4thLippman hat eine Neuauflage des C++ Primer in Arbeit:
http://www.amazon.de/C-Primer-Stanley-B-Lippman/dp/0321714113Andere Koryphäen haben ihre Standardwerke schon angepasst:
http://www.amazon.de/The-Standard-Library-Tutorial-Reference/dp/0321623215Irgendwo 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/3826691431Je 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
zeichenkettegenau vorstellen? Dann wird späterchar*im Beispielcode verwendet ohne Erklärungen. Die For-Schleife wird mitfor ( 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
trueergibt, 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
dateinameein Zeiger ist. Wie kann er dann wissen, dass sich dasconsthier 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 Bytefloat: 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 darstellenfloat: 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.