C++] Strukturen
-
Das ist Code aus dem Buch "C++ von A bis Z", ich kenn den Code nur zu gut!
Es gibt da einen Post über die Bücher von Jürgen Wolf, den find ich aber gerade nicht.
Wichtig ist, dass du aufhörst damit "C++" zu lernen. Das Buch ist ganz doof. Da lernst du kein C++, sondern "C mit Klassen".
Hol dir was besseres, hier eine Auswahl:Empfehlen kann ich Der C++ Programmierer von Ulrich Breymann, DAS ist modernes C++.
-
Incocnito schrieb:
Das ist Code aus dem Buch "C++ von A bis Z", ich kenn den Code nur zu gut!
Es gibt da einen Post über die Bücher von Jürgen Wolf, den find ich aber gerade nicht.
Wichtig ist, dass du aufhörst damit "C++" zu lernen. Das Buch ist ganz doof. Da lernst du kein C++, sondern "C mit Klassen".
Hol dir was besseres, hier eine Auswahl:Empfehlen kann ich Der C++ Programmierer von Ulrich Breymann, DAS ist modernes C++.
Im Moment ist glaub gerade wieder mal so eine WOLF-Phase im Gange

Gab schon einige Threads in den letzten Wochen, die wir dem lieben Herrn Wolf zu verdanken haben
Lg freeG
-
Ich werd dem guten Herr Wolf mal ne Mail schreiben, wer ist dafür?
EDIT: Ich werde diese an "judith.stevens@galileo-press.de" senden (steht dort mit "Für Fragen und Anmerkungen zum Inhalt des Buches").
Ich werde mal auf diesen langen Thread da verweisen und nachdrücklich anhand von Beispielen erläutern, wieso das Buch korrekterweise in "C/C++ von A bis Z" umbenannt werden müsste. Oder was schlagt ihr vor soll ich ihm sagen?
-
Incocnito schrieb:
Ich werd dem guten Herr Wolf mal ne Mail schreiben, wer ist dafür?
Ich.
-
Incocnito schrieb:
Oder was schlagt ihr vor soll ich ihm sagen?
Also ich bin für "C++ von Klassen bis C"

-
Ich hab jetzt mal eine kleine eMail abgesendet - mal sehen, wie sie reagieren..
-
Incocnito schrieb:
Ich hab jetzt mal eine kleine eMail abgesendet - mal sehen, wie sie reagieren..
Kannst du sie auch noch an mich schicken? Mich nimmt es echt Wunder.
-
Oder Titel: Schlechter Stil und Fehler in C/C++ rechtfertigend kommentiert.
-
Eisflamme schrieb:
Oder Titel: Schlechter Stil und Fehler in C/C++ rechtfertigend kommentiert.

-
Ja ich hab da einen 2 Seiten Beschwerdebrief hingeschickt.
Ihr könnt euch da ja auch mal melden. Euch stört dass, dann ändert es.
Eine Mail kann ignoriert werden - 5 hingegen schwer. Ih rmüsst ja nicht unglaublich viel schreiben, sagt einfach, was euch stört. Schaden kann es ja nicht..Und wenn jemand fragen zum Buch hat, ich hab hier ein Exemplar liegen.
So sieht mein Beschwerdebrief aus, er muss ja nicht unbedingt formell sein, wir schreiben ja an eine Privatperson und an keine Firma:
-
Incocnito schrieb:
Ja ich hab da einen 2 Seiten Beschwerdebrief hingeschickt
Und was bringt das? Vom Markt wird das Buch wohl kaum gehen. Das beste was passieren kann, ist, dass er das Buch überarbeitet und wenn er tatsächlich keine Ahnung von C++ hat, wie ihm ja von einigen unterstellt wird, bringt das rein gar nichts.
Ich denke sinnvoller ist es, ganz spezifisch auf einzelne Codebeispiele eingehen und versuchen, Schadensbegrenzung zu betreiben.
Jürgen Wolf schrieb:
struct astruct { int iwert; float fwert; };Ungarische Notation ist in C++ verpönt ...
Jürgen Wolf schrieb:
int main(void)... genauso verpönt wie das void in der Parameterliste.
Jürgen Wolf schrieb:
struct astruct atest;Das ist etwas, was mich aufregt. In C++ schreibt niemand und wirklich gar niemand
structvor Strukturen. Das wird allein wegen der C-Kompatibilität vom Compiler gebilligt. Hier wird ein Anklagepunkt von Incocnito klar: C mit Klassen.Jürgen Wolf schrieb:
void print ( const struct astruct * p )Igitt Zeiger. Das ist genau der Anwendungsfall, für den Referenzen eingeführt wurden. Hier
solltemuss man Referenzen benutzen.
Aber ich tue dem Autor Unrecht. Er sagt doch:Jürgen Wolf schrieb:
Natürlich lässt sich das auch mit den Referenzen nachbilden.
Allerdings muss man dann wieder mit dem Punktoperator auf die einzelnen Elemente zugreifen, und der Funktionsaufruf erfolgt ohne den Adressoperator:Von einer Wertung sehe ich da nichts. Und genau die müsste hier erfolgen um einem Anfänger die folgende Funktion anzugewöhnen:
Jürgen Wolf schrieb:
void print ( const struct astruct& p ) {Diese Funktionsdeklaration gehört ins ABC von jedem C++-Programmierer und nicht die Variante mit den Pointern.
Aber J.W. hat etwas gegen Referenzen:
Jürgen Wolf schrieb:
Eine Referenz in C++ ist nichts anderes als ein anderer Name (Alias-Name) für ein Speicherobjekt.
Im ganzen Abschnitt über Referenzen fragt man sich, was diese denn eigentlich sollen. Und in der Tat: innerhalb einer Funktion nutzen sie wirklich nichts. Man verwendet sie als Parameter von Funktionen. Als syntaktisch schönere Alternative zu konstanten Pointern. Und meistens anstelle von konstanten Pointern auf konstanten Speicher.
Der Abschnitt über die Referenzen sollte unbedingt ausgebaut werden und mit einem realistischen Beispiel.
-
Ich fande es auch lustig, dass er immer wieder sagt, dass alte Zeiger im C-Style da nicht hingehören, veraltet und unsicher sind. Trotzdem benutzt er sie das ganze Buch über - was soll das?
Er widerspricht sich selbst andauernd. Und alles mit dem Argument:Jürgen Wolf: C++ von A bis Z, Kapitel 2. C-Strings, S. 164 schrieb:
Ihnen ist sicher aufgefallen, dass die Verwendung von C-Strings recht umständlich ist, und häufig kann eine falsche Verwendung zu gefährlichem Code, wie zum Beispiel Pufferüberläufeb (Buffer Overflow), führen. [...]
Leider hat die Vergangenheit gezeigt, dass sich viele Programmierer einfach nicht an diese Regeln gehalten haben, so dass heute kein Tag vergeht, an dem nicht wiede reine Sicherheitslücke in einem programm gefunden und gegebenenfalss ausgenutzt wurde. [...]
Und aus dem Grund, dass die C-Strings recht umständlich zu bedienen sind und der Sicherheitsaspekt häufig vernachlässigt worden ist, wurde in C++ die
string-Klasse eingeführt, die erheblich einfacher zu verwenden ist, mehr Funktionalität bietet und vor allem erheblich sicherer ist. Aber wie bereits erwähnt - da es noch viele Zeilen C-Code gibt, müssen Sie sich als ernsthafter C++-programmierer auch mit C-STrings befassen. Und wenn die Ausführgeschwindigkeit auch noch von Bedeutung ist (aber nur dann), sind die C-Strings immer noch wesentlich effizienter. [...]Die Klasse string wird dann auf Seite 695 beschrieben, davor wird immer const char* verwendet.. Aha.

Er sagt ja auch, dass sich ein C++-programmierer häufig mit altem C-Code rumprügeln muss. Ich kann das bis jetzt nicht bestätigen (außer wenn sich hier Leute melden, die aus einem völlig veraltetem Buch [C++ von A bis Z :D] oder einem alten Kurs C++ lernen) - was sagt ihr dazu?
-
Na ja, WinAPI, OpenGL und diverse Bibliotheken arbeiten noch mit C-Strings. Im alten Standard muss man für fstream auch die Strings zu C-Strings machen... Die begegnen einem schon überall und immer wieder. Und es ist wichtig, dass man den internen Aufbau versteht. Ich würde die Dinger schon erklären und lehren, aber halt nicht bis zum Erbrechen.
Cool fände ich in C++ aber den Ansatz Strings vor Arrays zu erklären und bei der Erklärung von Arrays dabei langsam wieder string zu erklären (so ist ein string eigentlich auch nur eine Verkettung von chars). Und dann: Was, wenn wir nicht nur Zeichen verketten wollen, sondern ganz andere Objekte? Und dann kommt der Sprung zu den Containern.
Hm, ich hätte Lust ein C++-Tut zu schreiben.

-
Eisflamme schrieb:
Ich würde die Dinger schon erklären und lehren, aber halt nicht bis zum Erbrechen.
..und nicht gleich zu Beginn. Ich würde erst erklären wie man sie benutzt, dann erklären, wie sie denn funktionieren. Vorher sollte man auf std::vector und co eingehen, finde ich.
-
Durch zitierst den letzten Satz meines ersten Absatzes, um einen Teil meines zweiten umzuformulieren? :p SCNR
-
Upps..
Dein erster Satz hat kein Komma, es ist öde in eine Landschaft ohne Satzzeichen zu blicken.. Ich musste ihn 3 mal lesen, um ihn zu verstehen
-
Huch, welcher Satz? Der meines zweiten Absatzes? Aber da ist doch ein und, das trennt Teil 1 von Teil 2.

-
So ich habe nun eine Antwort bekommen, die ich hier mal poste:
Jürgen Wolf schrieb:
Sehr geehrter Herr Schröder,
Es tut mir natürlich sehr leid, dass sie mit dem Buch nicht zufrieden sind.
Jeder Autor hat seine Art und Weise etwas zu erklären. Man überlegt sich, wie erkläre ich es am Besten ohne zuviel vorwegzunehmen. Die Zeiger wurden zu Beginn erklärt, um den Leser nicht gleich mit Klassen und Datenstruktur gleichzeitig zu bombardieren. Ebenso war es bei anderen Dingen im Kapitel 2 (wo sie am meisten Kritik geschrieben haben).
Ein Problem dürfte wohl für viele Leser sein, dass ich im Buch die Dinge wie std::string und std:vector hinten im Buch beschreibe und so eben nicht immer vorgreifen zu müssen. Das dürfte wohl auch die Hauptkritik der meisten Leser sein. Würde ich hier gleich auf std::string oder std::vector zurückgreifen, hätte ich auch nicht soviel "C mit Klassen" (wie sie es bezeichnen) verwenden müssen.
Ich habe diese Kritik natürlich auch zu Herzen genommen und bereits in meinem C++-Taschenbuch einfließen lassen. Auch die nächste Auflage des C++-Handbuches wird sicherlich komplett anders aussehen. Viele nützlich Verbesserungen habe ich ja schon und außerdem kommt ja auch noch der neue C++-Standard dazu.
Mit besten Grüße
Jürgen Wolf
-
Genau, die Hauptkritik liegt in der Didaktik, nicht etwa in seinen Fehlern. Solchen Leuten kannst Du nichts erzählen. Überhaupt sollte Kritik nicht an Jürgen Wolf gehen, der Typ ist einfach viel zu engstirnig. Man sollte eher den Verlag dazu bewegen, von dem Verlag seiner Bücher wegzugehen. Aber die kümmert es wohl nicht, wenn falsche Informationen verkauft werden, solange sich's verkauft. -.-
-
Ja, da hast du wohl recht. Den Verlag kriegen wir sicher nicht überredet, dem gehts nur ums Geld.
Dem Autor (eines Programmierbuches) hingegen meist aber nicht. Bleibt also nur zu hoffen, dass er sich unsere Kritik zu Herzen nimmt und eine neue, komplett veränderte Auflage herausgibt und die alte als unsicher und falsch deklariert.
Da kann man nichts machen..