Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++ (alle ISO-Standards) ::  Linkliste für Neulinge  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
IfundSwitchBuddy
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.06.2016
Beiträge: 9
Beitrag IfundSwitchBuddy Mitglied 18:51:16 26.06.2016   Titel:              Zitieren

Also ich finde für absolute Anfänger dieses Buch hier https://www.amazon.de/Pro ....... ollenschein/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 :-)

_________________
Die Kunst ist das "Künstlich" in "Künstliche Intelligenz"
Shamshir
Unregistrierter




Beitrag Shamshir Unregistrierter 23:15:52 27.06.2016   Titel:              Zitieren

IfundSwitchBuddy schrieb:
Also ich finde für absolute Anfänger dieses Buch hier https://www.amazon.de/Pro ....... ollenschein/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:
    C++:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #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". :o)


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.
Shamshir
Unregistrierter




Beitrag Shamshir Unregistrierter 00:16:13 28.06.2016   Titel:              Zitieren

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.
rocktheroots
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.08.2016
Beiträge: 3
Beitrag rocktheroots Mitglied 11:19:12 21.08.2016   Titel:   Videos dazu            Zitieren

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


Zuletzt bearbeitet von rocktheroots am 11:19:44 21.08.2016, insgesamt 1-mal bearbeitet
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 27521
Beitrag SeppJ Global Moderator 11:51:12 21.08.2016   Titel:              Zitieren

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 :die: )

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.
C++ Forum :: C++ (alle ISO-Standards) ::  Linkliste für Neulinge  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.