C++ Primer v.s. C++ von A bis Z
-
Ich bin neuling in C++ und möchte mir dazu ein für einsteiger gutes Buch holen. Nun habe ich schon manchesmal gehört das die Bücher C++Primer und C++ von A bis Z beide gut sein sollen. Meine Frage ist jetzt welches dieser Bücher ist für einen Änfänger am geeignetsten um es meist als Nachschlagewerk zu benutzen?
LG os
-
Also das C++ von A bis Z gut sein soll, habe ich noch nie gehört. Zumindest nicht, das es so der Burner sein soll. Ich hatte auch mal in dem Buch rumgeblättert. Sorry, aber ich konnte darin keine C++-Linie entdecken.
Der C++ Primer ist definitiv eines der besten C++ Einsteigerbücher, und der Umfang des Buches wird dich auch ne Weile beschäftigen.
-
Ich habe mal "C++ von A bis Z" gelesen. Ist sicherlich gut - falls man C lernen will.
-
okee...íst C++ Primer den auch gut als reines nachschlagewerk und nicht um es von anfang bis ende durchzuarbeiten...???
os
-
Habe C++ Primer nicht gelesen, gilt aber als ein sehr gutes Buch. Bei C++ von A bis Z wäre ich eher vorsichtig. Zumindest das Buch C von A bis Z hatte enthielt/enthält äußerst peinliche Fehler. Schau danach mal im ANSI C Forum.
Bei Einstiegsbüchern muss man vorsichtig sein, da da viele Verlage einfach drittklassiges Material raushauen. Daher ein paar allgemeine Vorsichtsregeln:
1. Kein Buch, dass von Spieleprogrammierung spricht.
2. Kein Buch mit einer CD-ROM.
3. Am besten ein englisches Buch oder zumindest eine Übersetzung davon.
4. Bücher von hauptberuflichen Autoren sind auch eher kritisch zu bewerten.Übrigens gibt es ein neues Buch vom C++-Erfinder persönlich, dass sich speziell an Anfänger richtet. Schau dir am besten das mal an:
Programming: Principles and Practice Using C++ | ISBN: 9780321543721
-
Ich habe beide Bücher und bin selber ein Anfänger, immer noch. Daher das folgende:
C++ von A bis Z ist einfach geschrieben, die Erklärungen gehen an vielen Stellen nicht allzu tief, was Vor- und Nachteil sein kann. Anfänger mit einer Flut von Informationen zu überhäufen halte ich für den falschen Weg eine Programmiersprache zu erlernen. Ich kann nur schwer beurteilen ob das Buch inhaltlich an allen Stellen korrekt ist, habe aber von vielen gehört, dass grobe Fehler enthalten sein sollen.
Der C++ Primer steigt relativ schnell in Klassen ein, was wohl heute ein Vorteil sein soll, ich finde es aber ein bischen arg schnell. Eindeutig geht der Primer tiefer auf die Merkmale von C++ ein, als C++ von A bis Z. Die enthaltenen Übungen sind zu bewältigen, leider sind aber keine Lösungen enthalten, oder ich bin nicht in der Lage sie zu finden.
Was würde ich mir heute kaufen, wenn ich nur ein Buch kaufen wollte? Den C++ Primer, ganz klar. Ich vertraue den Leuten die sagen, das Buch von J. Wolf würde Fehler enthalten. Daher kann ich für C++ von A bis Z keine Empfehlung aussprechen.
Ob allerdings auf Dauer ein Buch reichen wird, wage ich zu bezweifeln. Der C++ Primer ist zwar umfassend, aber in anderen Büchern findet man immer auch neue Ideen und Lösungsansätze für das eine oder andere Problem. Das Standard-Werk von Stroustrup im Regal stehen zu haben ist sicher nicht verkehrt.
Im übrigen empfiehlt es sich, den Primer in englischer Sprache zu kaufen. Die deutsche Übersetung scheint nicht so sauber zu sein wie man es von Addison Wesley eigentlich erwarten darf.Ich hoffe ich konnte ein wenig helfen und wünsche viel Spaß mit C++.
-
Ein Einsteiger kann meiner Meinung nach nicht wirklich ganz bewerten, ob ein Buch ein gutes C++-Buch ist. Er kann bewerten, ob er verstanden hat, was ihm dort vermittelt wurde. Aber ob ein C++-Buch auch "richtiges C++" vermitteln kann? Das kann ein Einsteiger ebend nicht. Das kann nur jemand, der Ahnung von C++ hat.
Und wie SeppJ schon schrieb, ist C++ von A bis Z eher ein "C-Buch das versucht C++".
Und Wolfsherz kritisiert genau die saubere C++-Linie in C++-Primer. Klassen und dessen Objekte kommen dabei schon in einem C++-HelloWorld!-Programm vor, siehe
std::cout
. Somit können Klassen nicht froh genug kommen. Normalerweise müsste gleich wegen einem HelloWorld! sogar schon zu Anfang Operator-Overloading vorkommen, damit man überhaupt die Hintergründe versteht.
-
Wolfsherz schrieb:
Die enthaltenen Übungen sind zu bewältigen, leider sind aber keine Lösungen enthalten, oder ich bin nicht in der Lage sie zu finden.
Für die 3. Auflage gab es noch ein Lösungsbuch, allerdings nicht von den Autoren selbst.
Hier ein Seite, die dir nützlich sein könnte: http://cppprimer.jesseolmer.com
-
OSKiel schrieb:
okee...íst C++ Primer den auch gut als reines nachschlagewerk und nicht um es von anfang bis ende durchzuarbeiten...???
Das verstehe ich jetzt nicht so ganz. Weil als Anfänger wirst du nicht komplett hin und her springen können. Es gibt Bücher, wie "Der C++ Programmierer" von Ulrich Breymann, welch aus zwei Teile bestehen: 1. Teil arbeitet man von Anfang zum Ende durch. 2. Teil ist ein Nachschlagewerk. Das Buch ist übrigens auch sehr zu empfehlen!
Der C++ Primer ist ähnlich aufgebaut.
Die Frage ist: was willst du denn nachschlagen? Meistens muß man ja nur die C++-Bibliothek nachschlagen, das macht man wohl immer und immer wieder. Die Sprache selbst hat man aber irgendwann intus. Da kann man auch in einem "Nichtnachschlagewerk" nachschlagen.
Ich selber habe sogar mehrere Nachschlagewerke: 1. "Die C++ Standardbibliothek" vom Springer Verlag. 2. "Die C++ Programmiersprache" von Bjarne Stroustrup. Und das sind nicht meine einzigen C++-Bücher!
Du wirst also nicht darum herum kommen, im Laufe der Zeit immer wieder Bücher zu kaufen.
-
Ich habe die 4. Auflage des C++-Primers selbst gelesen. Was ich dir sagen kann, ist folgendes: Lass dich bloß nicht vom 1. Kapitel abschrecken. Klar, dort kommen schon Klassen drin vor, aber das 1. Kapitel ist mehr als ein Ausblick auf die Dinge die da kommen mögen zu verstehen. Das 1. Kapitel ist auch nur ca. 30 Seiten lang und wenn du da noch nicht all zu viel verstehst, ist das auch nicht schlimm. Denn danach geht es mit ganz elementaren Dingen los. Elementare Typen, Variablen, Deklaration und Definition, etc. Im Anschluss daran machst du schon Bekanntschaft mit std::string und std::vector und erhälst einen kurzen Überblick über Iteratoren. Dabei lernst du erstmal nur mit std::string, std::vector und Iteratoren umzugehen. Das ganze wird dann in späteren Kapiteln immer weiter vertieft. Erst im Kapitel 4 kommen dann die Zeiger und Arrays. Es folgen Kapitel über Anweisungen, Ausdrücke und Funktionen und du wirst immer weiter mit der C++-Standardbibliothek vertraut gemacht. Erst ab dem 12. Kapitel wirst du lernen eigene Klassen zu schreiben und Operatoren zu überladen. Dabei geht man auch intensivst auf die Fallstricke ein, über die man stolpern kann wenn man Zeiger in Klassen verwendet. Es folgt ein umfangreiches Kapitel über Vererbung und die Templates kommen natürlich auch nicht zu kurz. Zum Schluss gibt es dann noch 2 Kapitel über fortgeschrittenere Themen wie z. B. virtuelle Vererbung.
Ich fand das Buch rundum gelungen und die deutsche Übersetzung hat sicherlich den einen oder anderen kleinen Fehler drin, aber ist dennoch ganz lesenswert. Also eine klare Empfehlung meinerseits.
-
@all: danke für die infos
Artchi schrieb:
Die Frage ist: was willst du denn nachschlagen?
Also ich brauche ein Buch wo ich nachschlagen kann wenn ich z.B. nicht weiß wie man z.B. eine if-schleife aufbaut...weil bei mir läuft es so mein meister sagt schreibe nen programm für ein Fahrstuhl und dann muss ich dasmachen ohne weiter hilfe...
-
Ich habe (u.a.) C++ von A bis Z gelesen und kann sagen: für einen Anfänger ist es durchaus geeignet. Es geht umfangreich auf alle Teilgebiete ein und erklärt jedes Thema in einer angemessenen Sprache. Dieses Buch bildete bei vielen das "Tor zu C++", nach diesem Buch hat man keine Probleme mehr, durch speziellere Bücher durch zu kommen, der Autor erwähnt dort z.B. Stroustrup's "Die C++ Programmiersprache" für den guten alten "Feinschliff", ich würde auch noch "Effektiv C++ programmieren" dazunehmen. Der Autor hat immer einen gewissen C-Stil inne, aber ich finde das nicht schlimm. Es hilft oft dem besseren Verständnis des internen Aufbaus der Standardbibliothek. Wer von Anfang
std::string
nimmt und nie mal richtig Fehler mit C-Strings gemacht hat bzw. wer immer nurstd::list
benutzt, ohne auch mal selber eine Template-basierte Verkettete Liste gebaut zu haben, der hat wirklich was verpasst und kann nicht behaupten, C++ in all seinen Facetten kennengelernt zu haben, denn C gehört immernoch zu C++.
Ich warne als etwas erfahrenerer Programmierer vor 2 Dingen in dem Buch:1.) Die Kapitel der STL sind mit der Weile mehr als langweilig. Sie sind im Zyklus immer Tabelle - Erklärung - Code - Tabelle ... Es dient als gute Referenz, wenn man mit Google gerade das nicht findet, was man doch mal dunkel in Erinnerung hatte, der ausführliche Register hat es dann hinten drin, aber an sich ist es manchmal einfach langweilig.
2.) Es kann schon mal ein inhaltlicher Fehler oder Kuriositäten vorkommen. Ich staunte nicht schlecht, als er z.B. einen selber programmierten STL-Vector-Container privat von seinem eigenen Allokator erben lässt, obwohl Komposition eigentlich der bevorzugte Weg und auch oft so in den Standardbibliotheken umgesetzt ist.
-
Ad aCTa schrieb:
Wer von Anfang
std::string
nimmt und nie mal richtig Fehler mit C-Strings gemacht hat bzw. wer immer nurstd::list
benutzt, ohne auch mal selber eine Template-basierte Verkettete Liste gebaut zu haben, der hat wirklich was verpasst und kann nicht behaupten, C++ in all seinen Facetten kennengelernt zu haben, denn C gehört immernoch zu C++.Dem widerspreche ich wieder einmal in einen wesentlichen Punkt: Es ist kein Fehler auch mal einen C-Ausflug zu machen, die Reihenfolge zweifel ich aber an. Ich habe die Erfahrung gemacht das jemand der erst den C-Weg geht, sich diesen auch angewöhnt. Warum nicht erst einmal C++ lernen, und dann und wann ein paar Blicke hinter die Kulissen werfen lassen (Sprich mit std::string und Co beginnen, aber von Zeit zu Zeit auch - aber halt danach - den C-Weg zeigen).
-
asc schrieb:
Ad aCTa schrieb:
Wer von Anfang
std::string
nimmt und nie mal richtig Fehler mit C-Strings gemacht hat bzw. wer immer nurstd::list
benutzt, ohne auch mal selber eine Template-basierte Verkettete Liste gebaut zu haben, der hat wirklich was verpasst und kann nicht behaupten, C++ in all seinen Facetten kennengelernt zu haben, denn C gehört immernoch zu C++.Dem widerspreche ich wieder einmal in einen wesentlichen Punkt: Es ist kein Fehler auch mal einen C-Ausflug zu machen, die Reihenfolge zweifel ich aber an. Ich habe die Erfahrung gemacht das jemand der erst den C-Weg geht, sich diesen auch angewöhnt. Warum nicht erst einmal C++ lernen, und dann und wann ein paar Blicke hinter die Kulissen werfen lassen (Sprich mit std::string und Co beginnen, aber von Zeit zu Zeit auch - aber halt danach - den C-Weg zeigen).
Dem widerspreche ich wieder einmal in einen wesentlichen Punkt: Es wird viel zu viel "reines C++" gebaut, wo es mit alten Methoden viel einfacher und schneller ginge.
-
Ich finde, wenn man mit
std::string
beginnt, macht man sich gar nicht erst noch die Mühe, sich mit char-Arrays und deren Besonderheiten auseinander zu setzen und das richtig zu verstehen (was ich aber für sehr sehr wichtig halte, diese C-String-Geschichte). Umgekehrt hingegen, wenn man sich oft mit C-Strings verfrickelt, kann einem dann der C++-String wie ein Segen vorkommen und wird dankend angenommen. - war jedenfalls bei mir so -
-
Man kann auch nachträglich lernen, wie intern z.B. die String-Klasse arbeitet. Wer sich z.B. das Buch "Die C++ Standardbibliothek" aus dem Springer Verlag kauft, wird z.B. im ersten Kapitel lernen, wie man einen eigenen Container und Algorithmus mittels Templates implementiert. Die Std-Algos werden auch erklärt, wie man sie implementieren kann. Aber natürlich muß man C++ als Sprache können, weil das Buch kein C++-Einsteigerbuch ist.
Was ist denn heute das Problem am Image von C++? Nämlich das angebllich immer "der komplizierte Weg" gegangen wird. Es gibt da einen User hier im Forum, der das immer wieder sagt... und das kommt meistens daher, das die C++-Programmierer nicht die Standard-Lib kennen und nicht benutzen. nein, ich muß ja dynamische Arrays mittels "new" benutzen. Weil vector habe ich nur nebenbei mal kennen gelernt.
Als ich damals Vector im "Die C++ Standardbibliothek" kennen gelernt habe, habe ich Luftsprünge gemacht und erstmal meinen Kumpel angerufen und ihm begeistert über meine neue Entdeckung erzählt. Seit dem habe ich nie wieder ein dynamisches Array mittels new angelegt!!! Aber ich bin wohl eher die Ausnahme, die so reagiert. Es ist "cooler" Lowlevel und fehlerträchtig zu programmieren, obwohl man es nicht muß.
-
Artchi schrieb:
Was ist denn heute das Problem am Image von C++? Nämlich das angebllich immer "der komplizierte Weg" gegangen wird. Es gibt da einen User hier im Forum, der das immer wieder sagt... und das kommt meistens daher, das die C++-Programmierer nicht die Standard-Lib kennen und nicht benutzen.
Sehe ich ebenso. Wenn dann Probleme geschildert werden und man std::vector oder std::string vorschlägt, kommt dann immer: Soweit bin ich noch nicht im Buch (oder ähnliches).
Wer hier vorwirft das man heute viel zu viel C++ lernt, soll mir erstmal Zeigen wo das bitte schön so ist. Eher hat man diverse C-Kompatibilitäts-Probleme bei Anfängern. Und C++ mag zwar weitgehend C-Kompatibel sein, C++ ist dennoch nicht C! Wer das Wissen braucht, oder sich für die Details interessiert kann sich jederzeit noch nachträglich damit vertraut machen. Ich halte ein gewisses Grundwissen auch für sinnvoll, aber sehe es für wichtiger an, wenn jemand erstmal auf sicheren Boden beginnt (Beispiel std::string) und schnell ein erstes Erfolgserlebnis bekommt, als sich von Anfang an mit der Pointerproblematik beschäftigen zu müssen, bevor er auch nur den ersten Text zusammensetzen und ausgeben kann.
Das ist etwa so als würde man jemanden daran hindern mit Kreide an einer Tafel zu schreiben, wenn er nicht vorher die chemische Zusammensetzung der Kreide kennt.
Man kann auch ohne C-spezifische Kenntnisse ein C++ Programm schreiben, und sich das Wissen, wenn es nötig oder sinnvoll ist, bei Bedarf aneignen.
-
asc schrieb:
Man kann auch ohne C-spezifische Kenntnisse ein C++ Programm schreiben, und sich das Wissen, wenn es nötig oder sinnvoll ist, bei Bedarf aneignen.
Ist es wieder Zeit für diese Diskussion? Na dann ...
Also, ich widerspreche hier. Weil es meiner Erfahrung nach eigentlich selten bis nie darum geht C++ an sich zu lernen.
An den Hochschulen wird in den Informatik-Grundkursen eigentlich immer mit der Implementierung von dynamischen Datenstrukturen (Listen, Bäumen, Mengen ...) sowie Suchalgorithmen, Sortieralgorithmen usw. begonnen - also praktisch pure Zeigermanipulation.
Ob Pascal, Java, C, C++, ode was auch immer, es läuft immer darauf hinaus obige Konzepte zu verstehen. Gleichzeitig habe ich es noch nie erlebt, dass z.B. C-lastiger Programmierstil irgendwie als problematisch angesehen wurde bzw. überhaupt thematisiert wurde.
-
Mitleid schrieb:
Also, ich widerspreche hier. Weil es meiner Erfahrung nach eigentlich selten bis nie darum geht C++ an sich zu lernen.
Selbst im Studium hatte ich erst Klassen der (damals noch nicht ganz standardisierten) C++ Bibliothek, bevor wir wild mit Zeigern jonglierten. Den es geht um mehrere Bereiche, und der erste ist auch, Ergebnisse in irgendeiner Form auszugeben (und da ist std::string und std::cout nicht verkehrt) und dann wie man bestimmte Mechanismen einsetzt.
Mitleid schrieb:
An den Hochschulen wird in den Informatik-Grundkursen eigentlich immer mit der Implementierung von dynamischen Datenstrukturen (Listen, Bäumen, Mengen ...) sowie Suchalgorithmen, Sortieralgorithmen usw. begonnen - also praktisch pure Zeigermanipulation.
Und auch dafür muss man nicht erst C-Spezifische Dinge lernen, sondern auch da reicht es die Bereiche zu erklären die man benötigt, und die C++ Standardbibliothek kann dennoch für Ausgaben etc. sinnvoll sein.
Mitleid schrieb:
Gleichzeitig habe ich es noch nie erlebt, dass z.B. C-lastiger Programmierstil irgendwie als problematisch angesehen wurde bzw. überhaupt thematisiert wurde.
Ich schon, im Berufsleben, und teilweise sogar im Studium.
-
OSKiel schrieb:
Also ich brauche ein Buch wo ich nachschlagen kann wenn ich z.B. nicht weiß wie man z.B. eine if-schleife aufbaut...