Jürgen wolf



  • Hallo,

    also mein freund der schon etwas länger programmiert als ich hat mir als zweitbuch c++ von a bis z empfohlen.

    ich habe ein paar threads hier im forum durchgelesen und bin jetzt etwas verwirrt.

    ist das buch wirklich so schlecht ?
    ich würde es halt für lau bekommen.



  • Du hast den bösen Buchautor mit Namen und den Titel des Buches genannt... 👎

    Qualität hat seinen Preis 🙄



  • Das Buch steht bei mir in der Toilette und ich verwende es nicht um es zu lesen...



  • Wenn als Zweitbuch Klopapier für alle Fälle gemeint ist, dann stimme ich deinem Freund zu.

    EDIT: Nur so als Beweis: http://www.mediafire.com/?pwp5x3ado9x7sj7



  • EOutOfResources schrieb:

    EDIT: Nur so als Beweis: http://www.mediafire.com/?pwp5x3ado9x7sj7

    Anbei eine Auswahl von Programmbeispielen mit groben Fehlern aus einem aktuellen Lehrbuch. Das Buch hat nicht mal ein Literaturverzeichnis, will aber ein Fachbuch sein. Ein kleines Rätsel: Welches Buch ist es?

    *****************************************************
    Seite 325, mensch.h (Auszug)
    class Mensch {
       private:
       // Eigenschaften der Klasse Mensch
       char *name;   // Speicher wird zur Laufzeit reserviert
       int len;      // Länge des Namen
       unsigned int alter;
       bool geschlecht; //0 = männlich; 1 = weiblich
       public:
       Mensch( const char*, unsigned int, bool );
    // ... Rest weggelassen 
    }
    

    Kritik: interne Nutzung von char* statt string. Nachteil 1: eigenes
    Memory-Management notwendig, Nachteil 2: fehleranfällig (der Autor
    kommt selbst damit nicht klar, wie noch zu sehen)

    *****************************************************
    Seite 327
    void Mensch::erzeuge(const char* n, unsigned int a, bool g){
       // ... vom Konstruktor reservierten Speicher freigeben
       delete [] name;
       // Speicher für neuen Namen anfordern
       len = strlen(n);
       name = new char[len+1];
       strcpy( name, n );
       alter = a;
       geschlecht = g;
    }
    

    Kritik: Der Code ist nicht exception-sicher. Wenn es ein Problem bei der Speicherbeschaffung gibt, ist das Objekt zerstört, weil vorher delete [] aufgerufen wird. Diese Art Problem durchzieht das ganze Buch.

    *****************************************************
    
    Seite 331:
    Mensch person1("Adam", 22, Mensch::MANN );
    

    Kritik: Dazu muss man den Konstruktor sehen (Seite 325):
    Mensch( const char*, unsigned int, bool );
    Obwohl nur ein bool Parameter vorhanden ist, wird ein enum übergeben. Dabei wird die ganz interne Kenntnis ausgenutzt, dass Mensch::MANN implizit auf 0 bzw. false abgebildet wird. D.h. die Reihenfolge MANN, FRAU in der enum-Deklaration
    ist entscheidend!

    *****************************************************
    Seite 331: 
    // Zuweisungsoperator überladen - Defintion
    Mensch& Mensch::operator=( const Mensch& person ) {
       // Auf Selbst-Zuweisung überprüfen
       if( this == &person ) {
          return *this;
       }
       else {
          len = person.len;
          name = new char[len+1];
          strcpy( name, person.name ); 
          alter = person.alter;
          geschlecht = person.geschlecht; 
          return *this;
       }
    }
    

    Kritik: Memory-Leak. Der alte Speicher wird nicht gelöscht. Dieser Fehler kommt oft vor.

    *****************************************************

    Seite 361: String-Klasse mit char*-Attribut, aber OHNE Zuweisungsoperator, obwohl der schon behandelt wurde. Eine Zuweisung führt daher zum Memory-Leak und fehlerhaften Destruktor-Aufruf.

    *****************************************************
    Seite 375 ganz oben: ( Postfix-Operator ++)
    myComplex& operator++(int) {
       // Für den Rückgabewert
       myComplex tmp(*this);
       // Originalwerte ändern
       _real++;
       _image++;
       // ursprünglichen wert zurückgeben
       return tmp;
    }
    

    Kritik: Crash-Gefahr! Rückgabe einer lokalen Variablen per Referenz!

    *****************************************************

    Seite 379:
       // Überladung des Indexoperators 
       const char& operator[](unsigned int index) const {
           static char q = '?';
           // Indexüberprüfung
           if( (index >= 0) && (index < len) )
              return buffer[index];
           // Im Fehlerfalle ein Fragezeichen zurückgeben
           return q;
       }
    

    Kritik:

    1. Die Abfrage (index >= 0) ist schwachsinnig, weil index als unsigned int IMMER >= 0 ist.

    2. Der Index-Operator blödsinnig konstruiert. Wenn z.B. die Position 1000 im String "Wie geht es Dir? Gut?" abgefragt wird, ist dem Aufrufer nicht klar, ob er ein Fragezeichen gefunden hat oder ob ein Fehler vorliegt. Das hat natürlich mit C++ nix zu tu, so etwas ist in jeder Programmiersprache unsinnig.

    *****************************************************

    Seite 471, Zeichnung: Dass Wurst und Brot von Supermarkt erben, hat mit objektorientiertem Design nichts zu tun. Der Autor sollte mal ein Buch zur Objektorientierung lesen.

    *****************************************************
    es gibt noch mehr ... ... aber nicht hier. Das kann jemand anders ergänzen.



  • Bei dem letzten Codeschnipsel könnte man als Kritik noch hinzufügen, dass q static ist. Wenn es das nicht wäre, würde es bestimmt von jedem Compiler wegoptimiert werden.



  • Anmerkung schrieb:

    Bei dem letzten Codeschnipsel könnte man als Kritik noch hinzufügen, dass q static ist. Wenn es das nicht wäre, würde es bestimmt von jedem Compiler wegoptimiert werden.

    Wenn es nicht static wäre, hättest du das selbe Problem wie im Beispiel davor - du gibst eine Referenz auf eine nicht mehr existierende Variable zurück.
    (es hat schon seinen Grund, warum vector<>::at() (die bereichsgerpüfte Version des Index-Operators) bei einem ungültigen Index keinen Dummy-Wert zurückgibt)



  • Ich hatte den Inhalt der Datei auch vor kurzem hier gepostet, ohne natürlich zu "checken", dass es sich wirklich um "C++ von A-Z" handelt.

    Seite 471, Zeichnung: Dass Wurst und Brot von Supermarkt erben, hat mit objektorientiertem Design nichts zu tun. Der Autor sollte mal ein Buch zur Objektorientierung lesen.

    Das ist zu schön, um wahr zu sein, siehe auch Herrn Bebel (humoristischer Beitrag von Volkard vor Urzeiten).



  • okay also kann man sich mit dem buch den hintern abwischen. tolettenpapier kann das auch. also ist das buch tolettenpapier

    so richtig ?^^


  • Mod

    meeydoo schrieb:

    okay also kann man sich mit dem buch den hintern abwischen. tolettenpapier kann das auch. also ist das buch tolettenpapier

    so richtig ?^^

    Nach Jürgen Wolf, wäre das Buch eine Toilette.



  • SeppJ schrieb:

    meeydoo schrieb:

    okay also kann man sich mit dem buch den hintern abwischen. tolettenpapier kann das auch. also ist das buch tolettenpapier

    so richtig ?^^

    Nach Jürgen Wolf, wäre das Buch eine Toilette.

    Eher ein Supermarkt...



  • kann ich euch mal was fragen? ist zwar mehr offtopic aber lohnt sich irgentwie nicht nen neuen thread aufzumachen.

    ich gehe mal davon aus, dass hier ein paar schon informatik studiert haben ?

    konntet ihr schon einigermaßen gut programmieren, oder habt ihr das erst auf der uni gelernt?

    ich hab nämlich jetzt bis oktober zeit, mich einzuarbeiten. es macht zwar sehr viel spaß, aber es geht langsamer als gedacht und bis dahin werde ich nichtmal mit primer durch sein =/.



  • meeydoo schrieb:

    ich gehe mal davon aus, dass hier ein paar schon informatik studiert haben ?

    konntet ihr schon einigermaßen gut programmieren, oder habt ihr das erst auf der uni gelernt?

    Ich hab' schon vor dem Studium ein wenig programmiert (damals noch in C64 Basic), ob man meine frühen Versuche schon als "einigermaßen gut" einstufen kann, will ich nicht beurteilen.



  • meeydoo schrieb:

    Hallo,

    also mein freund der schon etwas länger programmiert als ich hat mir als zweitbuch c++ von a bis z empfohlen.

    ich habe ein paar threads hier im forum durchgelesen und bin jetzt etwas verwirrt.

    ist das buch wirklich so schlecht ?
    ich würde es halt für lau bekommen.

    Es gibt vom gleichen Autor das Buch "Grundkurs C++", eine (nicht vom Kauf abratende) Kritik wurde hier im Forum auch schon veröffentlicht.

    s.
    http://www.c-plusplus.net/cms/modules.php?op=modload&name=mbBooks&file=index&func=isbn&isbn=3836215470

    Ansonsten gibt es auch gute Onlinetutorials, z.B. http://www.cpp-tutor.de/cpp/hinweise.html

    Generell kann ich auch nur empfehlen, wenn man ernsthaftes Interesse an der Programmiersprache(gilt eigentlich für alles, was man lernen möchte) hat, sich ein sehr gutes, möglichst umfassendes Buch zuzulegen.

    Gute Bücher leben davon, daß man sie kauft, die Arbeit, die dahintersteckt, ist enorm, so daß sie in der Regel ihr Geld wert sind. Gäbe es keine Bücher mehr und man müßte z.B. stattdessen Unterricht nehmen, wäre das ungleich teurer.



  • ja ich habe im moment c++ primer, welches sehr gut ist.
    davor hatte ich der c++ programmierer von ulrich breymann, welches teilweise sehr mekrwürdig erklärt. naja dann " jürgen wolf " und ein anderer freund wollte mir noch ähm... "a complete guide to c++ programing" von peter prinz ausleihen.

    naja primer werde ich auchjedenfall weiterlesen, aber ein zweitbuch lese ich aufjedenfall auch noch.
    danke schonmal für die seite http://www.cpp-tutor.de/
    da werde ich auch mal reinschauen.



  • meeydoo schrieb:

    Hallo,

    also mein freund der schon etwas länger programmiert als ich hat mir als zweitbuch c++ von a bis z empfohlen.

    Dann sollte sich dein Freund mal hier im Forum umschauen. Da gibt es viele Büchertipps auch für Leute die länger C++ programmiert haben und nicht wussten dass sie eigentlich ein C/C++ Mischmasch programmierten. (so wie ich 🙄 )

    meeydoo schrieb:

    ich habe ein paar threads hier im forum durchgelesen und bin jetzt etwas verwirrt.

    Das ist ein gutes Zeichen. Genau so ging es mir auch. 😞

    meeydoo schrieb:

    ist das buch wirklich so schlecht ?

    Ja ist es. Lass dich nicht von Amazon blenden. ( so wie ich 😡 )

    meeydoo schrieb:

    ich würde es halt für lau bekommen.

    ( so wie ich 😮 ) aber danach musst du erstmal richtiges C++ lernen und die Zeit die du geopfert hast um Jürgen Wolfs C++ zu lernen könntest du auch nutzen um ordentliches C aus einem anderen Buch zu lernen.

    Selbst sein C von A bis Z Buch ist nicht besser. Die Hälfte davon ist in C++ von A bis Z hineingepastet worden obwohl es eigentlich eine komplett andere Sprache ist.



  • meeydoo schrieb:

    ...ich hab nämlich jetzt bis oktober zeit, mich einzuarbeiten. es macht zwar sehr viel spaß, aber es geht langsamer als gedacht und bis dahin werde ich nichtmal mit primer durch sein =/.

    Da würde ich mir keine Sorgen machen.

    Programmieren an sich wurde uns eigentlich überhaupt nicht beigebracht. Das durfte/musste man sich so nebenbei aneignen. Du kannst auch nicht damit rechnen, dass dir c++ gleich etwas nützten wird. Es könnte z.B. sein, dass es mit funktionalen Konzepten beginnt wo dann ganz anders gedacht werden muss.

    Was du auf jeden Fall machen solltest ist nochmal intensiv Mathematik zu wiederholen, speziell Logik, Beweisverfahren, Mengenlehre ...

    Intensiv Mathe lernen, dass wird dich im Informatikstudium durch das Vordiplom bringen. Programmieren ist da nur Nebensache. 😃



  • Mitleid schrieb:

    meeydoo schrieb:

    ...ich hab nämlich jetzt bis oktober zeit, mich einzuarbeiten. es macht zwar sehr viel spaß, aber es geht langsamer als gedacht und bis dahin werde ich nichtmal mit primer durch sein =/.

    Da würde ich mir keine Sorgen machen.

    Programmieren an sich wurde uns eigentlich überhaupt nicht beigebracht. Das durfte/musste man sich so nebenbei aneignen. Du kannst auch nicht damit rechnen, dass dir c++ gleich etwas nützten wird. Es könnte z.B. sein, dass es mit funktionalen Konzepten beginnt wo dann ganz anders gedacht werden muss.

    Was du auf jeden Fall machen solltest ist nochmal intensiv Mathematik zu wiederholen, speziell Logik, Beweisverfahren, Mengenlehre ...

    Intensiv Mathe lernen, dass wird dich im Informatikstudium durch das Vordiplom bringen. Programmieren ist da nur Nebensache. 😃

    stark... richtiges mathe hatte ich noch nie 😕
    nur ein wenig matrix , lgs etc was irgentwie auf grundschulnivau war. den rest habe ich schon verdrängt. ein wenig angst habe ich schon vor mathe, aber eigentlich sollte ich das schaffen.

    gibt es vielleicht eine seite wo man sein mathe mal "auffrischen" kann ?^^

    **Edit

    achso ich hatte die möglichkeit fächer zu wählen , also mein zweitfach. zur auswahl standen BWL, Physik und Wirtschaftsinformatik.
    hab natürlich das letztere genommen :p

    Physik hatte ich btw noch garnicht, also wirklich noch NIE. dh von der 5-13 klasse 0 % physik.
    Gutes Schulsystem haben wir hier 😕
    Kommt im informatikstudium auch physik vor ?



  • Seite 375 ganz oben: ( Postfix-Operator ++)

    myComplex& operator++(int) {
       // Für den Rückgabewert
       myComplex tmp(*this);
       // Originalwerte ändern
       _real++;
       _image++;
       // ursprünglichen wert zurückgeben
       return tmp;
    }
    

    Hmmm, ich finde den Operator schon verwirrend.

    Der z++ Operator war doch eine verkürzende Schreibweise für z = z + 1. Wenn man nun z=a+ib setzt (Def. komplexe Zahl) kann man daraus schlussfolgern das z++ = (a+ib)+1 = (a+1) + ib was nicht dem Codebeispiel entspricht.



  • @Meeydo Wenn du ein allgemeines Informatik studium ohne spezielle Ausrichtung machcst, dann kommt da auf jeden Fall Grundlagenstoff der Physik dran. Bei uns nannte sich das "Grundlagen der Technischen Informatik", zunächst wurde schulwissen (dass es ja bei dir nicht so richtig gibt 😉 )rekapituliert, aber es ging sehr schnell von "den Basics" hin zu den relevanten Sachen für die Informatik(Schaltungen, Logik Gatter, Microcontroller usw. also Digitaltechnik, ums mal grob zu umreißen).

    @Bitte ein Bit Ich finde es schwierig eine komplexe Zahl zu inkrementieren, rein vom mathematischen her. Nach Definition müsste es ja tatsächlich so sein, dass dein Realteil um eins erhöht wird, dein Imaginärteil unverändert bleibt. Aus programmatischer Sicht in der Programmierung würde ich das Konzept des Inkrementierens eher so verstehen wollen, dass eben "das Ganze" um eins erhöht wird, also irgendwie alles signifikante für ein Objekt (in diesem Falle also Real- wie Imaginärteil [wie im Snippet gemacht]).


Anmelden zum Antworten