Linkliste für Neulinge



  • ...



  • Sorry wenn das etwas unnötig erscheint, aber der aktuellste GCC ist der 4.8.

    Außerdem wäre ein Verweis auf die C++11-Unterstützung des GCC 4.8 bzw. der anderen Compiler nicht schlecht, damit man beim Kompilieren des C++11-Codes zwischen Inkompabilität des Compilers und Falschheit des Codes unterscheiden kann.

    :duck-und-weg:

    Swordfish schrieb:

    kidpro schrieb:

    http://www.umaterialien.de/ ist auch nicht schlecht [...]

    Hab' mir mal die Pointer.ppt angesehenen - überzeugt mich nicht wirlich.

    Guck dir mal Klassen.ppt an. Das wird dich mehr "überzeugen".



  • Kleine Korrektur zu Boost

    Es gibt keinen aktuellen Installer mehr für Visual Studio (boostpro.com hat seine Pforten geschlossen; auch in der aktuellen Installationsanweisung ist kein Hinweis mehr auf Diesem).



  • asc schrieb:

    Kleine Korrektur zu Boost

    Es gibt keinen aktuellen Installer mehr für Visual Studio (boostpro.com hat seine Pforten geschlossen; auch in der aktuellen Installationsanweisung ist kein Hinweis mehr auf Diesem).

    Joa, ist aber eigentlich auch nicht nötig. Wer für ein aktuelles Visual Studio boost haben will, ohne viel tun zu müssen, nimmt einfach BlueGo (Danke an Vertexwahn):

    http://www.c-plusplus.net/forum/306184-full



  • Swordfish schrieb:

    C++11

    ⚠

    C++11 ist die neueste Fassung des C++-Standards, welche im August 2011 von der ISO verabschiedet wurde und C++03 ersetzt.

    Während das Verständnis einiger neuen Features wie z. B. Lambda-Ausdrücke, variadic templates und Multithreading samt tls solide Grundkenntnisse voraussetzt, sind andere bereits für Sprachneulinge interessant:

    • C++11 - Artikel in der englischen Wikipedia samt Auflistung wichtiger Neuerungen
    • ISO/IEC Document n3337 - im Grunde der Text des offiziellen Standards ISO/IEC 14882:2011 mit lediglich redaktionellen Änderungen

    Hallo Swordfish,
    kann man das nicht auf C++14 updaten.
    Hier ist der link auf den (glaub) letzte Working-Draft für C++14 den es für lau gab: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf, gefunden auf https://isocpp.org/std/the-standard

    Vielen Dank!
    dirkski

    Edit: besser anhängen als updaten, also einmal den existierenden für C++11 und den für C++14 darunter.



  • Also ich finde für absolute Anfänger dieses Buch hier https://www.amazon.de/Programmierung-für-Anfänger-Florian-Wollenschein/dp/3833422165 sehr Empfehlenswert, es beinhaltet zwar nicht viel Content, bietet aber alle einfachen Grundlagen und erklärt sie sehr verständlich, damit habe ich angefangen C++ zu verstehen, zudem verweist der anhang des Buches auf viele andere Werke für beginner und fortgeschrittene, vielleicht einen Kauf wert 🙂



  • IfundSwitchBuddy schrieb:

    Also ich finde für absolute Anfänger dieses Buch hier https://www.amazon.de/Programmierung-für-Anfänger-Florian-Wollenschein/dp/3833422165 sehr Empfehlenswert, es beinhaltet zwar nicht viel Content, bietet aber alle einfachen Grundlagen und erklärt sie sehr verständlich, damit habe ich angefangen C++ zu verstehen, zudem verweist der anhang des Buches auf viele andere Werke für beginner und fortgeschrittene, vielleicht einen Kauf wert 🙂

    Ich bin selbst Anfänger (präziser noch: Dilettant), aber das von Dir verlinkte Buch halte ich -- ausgehend davon, was Google Books mich einsehen lässt -- nicht für empfehlenswert. Der Ausdruck erscheint mir über weite Strecken ungelenk, das lässt sich allerdings verzeihen; fachliche Fehler, die wohl zum Teil auch auf dieser Schwammigkeit beruhen, wiegen schwerer. Ich habe versucht, einige davon zu finden und zu kommentieren; sollte ich dabei selbst danebengehauen haben, hoffe ich, dass man mich meinerseits zurechtweist.

    Zur Einleitung:

    • "1998 wurde mit ANSI C++ ein Standard geschaffen, der es erlaubt, dass ein C++-Programm auf jeder Plattform (Windows, Linux, ...) funktioniert."
      Guten Willens kann man erkennen, was der Autor hiermit meinte; dennoch finde ich den Satz mindestens grob fahrlässig formuliert, denn plattformabhängiges Verhalten findet sich unter C++ nach wie vor. Für ein Elementarbeispiel gerade in Hinsicht auf den C++98-Standard siehe hier.
    • Zu 0.5: Es gibt zum Glück eine ganze Reihe von "logischen" Fehlern, die vom Compiler erkannt werden (ggf. warnstufenabhängig), obwohl es sich nicht um Syntaxfehler handelt.
    • Zu 0.6: C++-Compiler werden vom Standard nicht dazu verpflichtet, "Nullen und Einsen" (besser: Maschinencode) zu erzeugen. Mit der Option -S speit z.B. die gcc plötzlich Assembly. 😉

    Zum 1. Kapitel ("Hallo Welt"):

    • Diese "cin.get();"-Geschichte, um "falls nötig" ein Konsolenfenster offenzuhalten, halte ich für eine Unsitte, auch wenn sie nicht in jedes Listing zwingend eingebaut, sondern nur am Rande vorgeschlagen wird. Wenigstens empfiehlt der Autor nicht "system("PAUSE");".
    • Das Wort "Präprozessoranweisung" wird eingeworfen, aber nicht erklärt. Ebenso verfährt der Autor kurz darauf mit dem Begriff "Funktion", der zuerst im Zusammenhang mit Namensräumen fällt; welche Bezeichner (nicht "Funktionen"!) im Hello-World-Listing nun den Namensraum std bewohnen, nämlich cout und endl, fällt dabei hinter den Schreibtisch.
    • "Der Rückgabewert einer Funktion gibt oft Auskunft darüber, ob sie erfolgreich beendet wurde oder nicht." Anstatt Fehlercodes zurückzugeben und per Fallunterscheidung zu behandeln, sollte man in C++ besser Exceptions werfen. Natürlich kann man z.B. in einer Funktion, die ein std::array durchsuchen und den Index des zu findenden Elements liefern soll, -1 zurückgeben, wenn man die Nadel nicht im Heuhaufen gefunden hat; das fällt m.E. aber ebenfalls unter die zitierte Formel "erfolgreich beendet" mit Blick auf den Algorithmus, der den Funktionswert liefert. Abgesehen davon wird an dieser Stelle mit dem Begriff "Rückgabewert" wie selbstverständlich umgegangen.
    • cout heißt nicht "console output", sondern "character output (stream)": http://en.cppreference.com/w/cpp/io/cout

    Zum 2. Kapitel ("Konstanten und Variablen")

    • Der Autor bezeichnet Literale anfangs schlicht als "Konstanten". Erst später geht er auf den Unterschied zwischen symbolischen und literalen Konstanten ein. Beispielsweise belegt er den Begriff "Zeichenkette/String" zunächst mit der Definition eines Stringliterals ("mehrere Zeichen, die in doppelte Anführungszeichen eingeschlossen sind").
    • "Achten Sie darauf, dass Steuerzeichen in C++ immer in einfachen Anführungszeichen stehen, da sie wie ein Zeichen behandelt werden". Warum funktioniert dann cout << "\n";?
    • Bits und Bytes: "0: Strom aus, 1: Strom an". Man spräche besser von High- und Low-Pegeln, zumal in einer Schaltung nicht garantiert ist, dass 0 als logischer Repräsentant des Low-Pegels auftritt ("positive/negative" Logik). "1111 1111" steht auch nicht unbedingt für die Dezimalzahl 255 (allerdings kann man z.B. von einem Isomorphismus zwischen den Wertemengen von signed char und unsigned char sprechen). "Berechnung" einer Binärzahl: besser "ihre Repräsentation zur Basis 10" oÄ.
    • In der Tabelle zu den Basisdatentypen werden "Wertebereiche" präsentiert, als wären diese festgeschrieben. Tatsächlich handelt es sich "nur" um die Mindestanforderungen des Standards.
    • Der Wertebereich von short darf höchstens so groß sein wie der von int und muss mindestens 2 Byte umfassen. Dass short allerdings einen streng kleineren Wertebereich umfasst als int, gilt laut Standard als implementationsabhängig.
    • Ich vermute, der Autor versteht die Technik hinter IEEE-754-Gleitkommazahlen nicht, denn er versucht nicht einmal, zu erklären, wie die Datentypen float und double aus jenen Nullen und Einsen resultieren, die wir gerade besprochen haben.
    • Zum Schnipsel "const float PI = 3.14159f;" schreibt der Autor: "Beachten Sie das f hinter der Zahl; es sorgt dafür, dass der Compiler die Zahl als float betrachtet, da standardmäßig double verwendet würde, was in diesem Fall Speicherplatzverschwendung wäre". Grober Unfug! Für eine symbolische Konstante vom Typ float wird keinesfalls der Speicherplatz einer solchen vom Typ double belegt; und da das bewusste Fließkommaliteral perfekt in eine float-Konstante passt, bereitet auch die vom Compiler vorgenommene implizite Konvertierung (die ein Einsteigerbuch im Zusammenhang mit Basisdatentypen unbedingt erwähnen sollte) in diesem Fall keine Probleme. Beide Varianten generieren mit der gcc exakt dieselbe Assembly. Richtig ist nur, das Fließkommaliterale ohne Suffix als vom Typ double betrachtet werden.
    • Der Autor formuliert, als bestimmten global/local scope unabdingbar die Reservierung des Speicherbereichs, der mit dem Bezeichner angesprochen wird. Dem ist nicht so: Der Anspruch auf den reservierten Speicher, auf den der Bezeichner verweist (storage duration), bildet eine andere Kategorie als der Gültigkeitsbereich des Bezeichners (scope); nur haben "lokale Variablen" eben, wenn nicht anders angegeben (Schlüsselwort static in einer seiner Bedeutungen), automatische Verweildauer. Der Unterschied zwischen static und external linkage wird ebenfalls unterschlagen: man sollte wenigstens darauf hinweisen, dass es bei "global" eben auch noch Abstufungen gibt. -- Die Nuancen der Scope kann man überdies sehr viel genauer beschreiben als bloß mit "global/lokal": http://en.cppreference.com/w/cpp/language/scope
    • Richtig böse ist das Beispiel zu Typecasts. Ich habe es zu Demonstrationszwecken kurz zu einem vollwertigen Programm ausgebaut; nur die ersten drei Zeilen in main() werden vom Autor selbst verwendet:
    #include <iostream>
    using namespace std;
    
    int main() {
        short x = 100;
        cout << x << endl;
        cout << x + 0.5 << endl;
    
        return 0;
    }
    

    Dieses Programm kompiliert anstandslos. Der Autor hält allerdings die dritte Zeile in main() für fehlerhaft, weil er seine eigenen Erklärungen anscheinend nicht beherzigt hat und seine eigenen Beispiele offenbar nicht immer ausprobiert: er behauptet, wir müssten x erst nach float casten, und verwendet dazu "cout << float(x) + 0.5 << endl;".

    Was der Compiler beim Zusammenprall mit solchen C-Style-Casts intern versucht, ist tatsächlich zunächst "const_cast<float>(x)" (was hier nicht geht), anschließend "static_cast<float>(x)" (Quelle). Man sollte in C++ zum Casten von Basisdatentypen lieber gleich den Gebrauch von static_cast anstelle von C-Style-Casts empfehlen.

    Zum Anhang:

    • Die "ASCII-Tabelle" lässt die ersten 32 Zeichen weg (mit der Begründung, das seien "computerinterne Codes" -- ach was!) und verdeutlicht nicht den Unterschied zum erweiterten ASCII-Zeichensatz (ab Index 128 == 2^7).
    • Glossar: Allgemein sehr knapp. Der Eintrag zu "Funktion" ("eigenständiges Programm...") gefällt mir nicht. Bei "Konstruktor" steht "Methode einer Klasse...": Methoden gehören per Definition zu einer Klasse. Zu "Operator: das Zeichen für eine bestimmte Operation" (gekürzt!) werde ich vornehm schweigen. Hübsch finde ich dagegen den nüchtern geflochtenen Kranz "Instanz: Objekt einer Klasse. [...] Objekt: Bezeichnung für die Instanz einer Klasse". 🤡

    Wer mich nicht beim Wort nehmen, sondern selbst vergleichen will: Stroustrup in seinem "Einsteigerbuch" (PPP) über "Hello, World!". -- Kapitel 1 im vorgeschlagenen Buch zum selben Thema, meine Quelle für diese Kritik.



  • Nachtrag zu eigenem Schnitzer: Ich störe mich an meiner ungenauen Verwendung von "Isomorphismus". In obigem Zusammenhang hätte ich einfach von einer bijektiven Abbildung sprechen sollen.



  • Hab anhand eines neuen Tutorials den Einstieg gemacht nach dem Motto:
    Theorie, Übung, gemeinsame Lösung finden. Fand ich gut, bisschen wie im Studium.

    https://www.youtube.com/edit?o=U&video_id=thaX0RnMcs4


  • Global Moderator

    Dein Link funktioniert nicht.

    Dieser Thread ist auch eher dafür gedacht, nur zu qualitativ hochwertigem Lehrmaterial zu verlinken. Kannst du die inhaltliche Qualität des genannten Tutorials beurteilen, wenn du doch absoluter Anfänger bist? Was du lobtest, könnte man so alles auch über ein Buch von Jürgen Wolf sagen. Die Qualität des Tutorials müsste man mal in einem eigenen Thread diskutieren (ich sehe, du hast damit bereits begonnen), dann kann man es eventuell hier aufnehmen.

    (Es macht auch nicht gerade einen guten Eindruck, ein neu registrierter Nutzer zu sein, dessen Beiträge allesamt zu diesen Videos verlinken. Das stinkt doch sehr nach Werbeaccount 👎 )