C++ lernen: in welcher Reihenfolge?
Guten Morgen,
Ich würde gerne wissen in welcher Reihenfolge ich die verschiedenen Fundamentals in C++ lernen soll. Die Syntax und Basics kenne und kann ich soweit schon (if/switch statements, functions, loops etc.).
Jetzt stehe ich vor dem Problem das ich nicht weiß in welcher Reihenfolge ich z.B Zeiger, Objektorientierung, Arrays etc. lernen soll. Ich habe bereits ein Grundverständnis für die Gebiete und auch schon mit Arrays experimentiert allerdings noch nicht tiefgründig. Es wäre nett wenn mir jemand sagen könnte was man nach den Basics als nächstes angehen sollte und am besten warum das würde mir sehr helfen Struktur im Lernablauf zu finden.
Vielen Dank
4 Antworten
Ich würde mich erst einmal mit Pointern und Arrays auseinander setzen da diese auch relativ fundamental sind und später mit dem Prinzip der OOP - vom kleinen zum Großen durcharbeiten. Habe damals auch mit C++ angefangen. Gute Übung für Pointer ist bspw. eine doppelt verkettetes Liste zu schreiben.
Zuerst Zeiger, dann Arrays und wenn man mit den Instrumenten der imperativen Programmierung durch ist, Objekttechniken.
Vielen Dank :) werde mich direkt mal dran setzen ! :)
Hallo,
Arrays sind keine C-typischen Konstrukte sondern in ziemlich allen Sprachen vorhanden, Zeiger und OOP auch. Ist C vielleicht deine erste Programiersprache?
MFG
Harry
Ja, dachte ich mir. Man kann sich aber auch eine Menge anlesen. Die einzige Programmiersprache die mir beigebracht wurde war DBASE IV, alle anderen musste ich selber durch.
Man findet auch zu allen Sprachen Kurse im Internet. Wo du auch viel lernen kannst sind die Sourcen von erfahrenen Programmierern
Arrays und Zeiger sind von Anfang an wichtig und ohne OOP läuft auch nichts mehr.
Zeiger sind halt Speicheradressen, die auf einen Inhalt weisen, aber nicht selbst den Inhalt darstellen. Der Vorteil ist dass der erforderliche Speicher für die Inhalte erst zur Laufzeit alloziert wird und nicht die exe Datei belastet. Deas weiteren kann der inhalt variabler Länge sein.
Ja, ich lerne tatsächlich auch mit YouTube Kursen die allerdings meistens nicht das große ganze des Programmierens schildern(wenn überhaupt möglich). Ich werde mich definitiv erstmal mit Zeigern und Arrays auseinandersetzen. Wichtig war mir nur mich nicht in einem schwarzen Lern Loch zu verlieren ohne zu wissen wo links und rechts ist und am Ende nur Halbwissen zu haben. Vielen Dank für die ausführliche Antwort :)
Es reicht zunächst mal, C zu lernen - den wichtigsten Teil von C++.
Erst danach befasst man sich mit Klassen (= Objektorientierung) und lernt so sehr schön, dass C erweitert um das Klassenkonzept aus C++ die wohl nützlichste Programmiersprache überhaupt darstellt: Hinzunahme des Klassenkonzepts macht den Gebrauch von C deutlich einfacher.
Noch mehr von C++ zu nutzen hat sich bisher für mich als eher kontraproduktiv erwiesen (die STL etwa scheint mir von Fanatikern entwickelt worden zu sein, denen ich dann auch nicht mehr folgen wollte). Ich halte auch nichts davon, jede Menge von Methoden zu haben, die aus nur einer einzigen Wertzuweisung bestehen: Fremden Code zu verstehen wird dadurch deutlich erschwert.
Hallo. Dem würde ich gerne fundamental widersprechen. Ich halte C für C++ als geradezu kontraproduktiv. Weil vollkommen unterschiedlich. Als Beispiel führe ich gerne Dozenten an, denen in meinem Informatikstudium C++ im Curriculum aufgedrängt wurde, die aber offenkundig nur C konnten. Deren Code war der größte Murks, bis hin zur Peinlichkeit. (Es gab zum Glück auch "Native C++"s.)
Dem Fragesteller würde ich empfehlen, sich auf "Modern C++" zu konzentrieren. Da hat sich in den letzten Jahren sehr viel getan. Annehmlichkeiten von Typdeduktion etc. Und bei Pointern auf verwaltete Pointer statt "rohe" Pointern zu setzen.
Templates sind wohl weiterhin ein großes Feld. Überhaupt hat man bei C++ und der STL so bald nicht ausgelernt. ;) Viel Spaß dabei.
Templates sind mit Sicherheit das Highlight von C++ (für die kurzen Programme, die man als Anfänger schreibt, aber völlig unerheblich).
Der Artikel (habe ihn nur quer gelesen) spricht glaube ziemlich viel von dem an, an das ich dachte.
Dass man bei C++ und der STL so bald nicht ausgelernt hat, ist leider richtig.
Nur: Bekommt man im praktischen Leben denn wirklich derart lange Zeit, seine ersten nützlichen Programme abzuliefern?
Templates sind auch ein Quell der Freude bei Fehlermeldungen (v. a. mit g++ statt clang). Das bereits indirekt angedeutete auto macht es jedenfalls etwas bequemer.
Wer Langeweile hat, kann sich ja mal den ISO-C++-Standard zu Gemüte führen. Ich empfehle z. B. den Absatz "Lvalues and rvalues" (3.10 Figure 1 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf)
So richtig meistert man es vermutlich erst, wenn der Ruhestand abzusehen ist. (Jedenfalls bei mittelmäßiger Befähigung.) C++ macht mir Spaß, obwohl ich es nicht sonderlich beherrsche, gerade mit den "modernen" Erweiterungen. C hingegen "kann" ich gar nicht, weil der Speicher dort wesentlich weniger abstrahiert ist. Beispiele sind wohl nullterminierte (C)Strings und Arrays als Rückgabewerte, die eigentlich nur Speicherpositionen sind. Das Klassengedöns kann man ja anscheinend auf Funktionen abbilden, wie es wohl auch Praxis ist. (Aber da ich kein C "kann"...)
Es war so um 1995 als ich einem Team von Programmieren empfohlen hatte, den OR-Mapper in ihrer Anwendung mit Hilfe von C++ Templates zu gestalten. Wie ich später hörte, haben sie mich damals für diesen Ratschlag verflucht, da sie ganz massiv mit Fehlern zu kämpfen hatten, die offensichtlich beim Zusammenbinden des Codes entstanden. Tritt so ein Problem mit heutigen C++ Compilern garantiert nicht mehr auf? Ab wann waren sie denn so weit?
Das Klassengedöns kann man ja anscheinend auf Funktionen abbilden, wie es wohl auch Praxis ist. (Aber da ich kein C "kann"...)
Nein. Die bessere Praxis ist, statt eines C Compilers einen C++ Compiler zu verwenden. Man kann dann C erweitert um das Klassenkonzept aus C++ als eine zwischen C und C++ liegende Programmiersprache auffassen und nutzen ohne sich mit allen anderen Teilen von C++ rumschlagen zu müssen.
Da war C++ noch relativ in den Kinderschuhen, oder? Ich kenne C++ hauptsächlich aus einem Informatikstudium ab 2000, wo es als Grundvoraussetzung/Lingua Franca verwendet wurde. Es gab anfänglich einen zweisemestrigen Kurs, zum Glück von jemandem, der C++ verstanden hatte. Seitdem ist mein Wissen etwas degradiert, es war auch nie wirklich elaboriert, so dass ich mich immer wieder "reinfuchsen" muss. "Rvalues und lvalues" (und einhergehend weitere "values") hatte ich ja schon benannt. Gleichzeitig, da wiederhole ich mich, entwickelt sich C++ ja wirklich sehr weiter. U. a. von höchster Stelle (Bjarne). Und es wird immer besser. Aber glaube auch einmal mehr komplexer/abstrakter.
Mir hat vor kurzem jemand gesagt, der derzeitige Lead Developer von C++ habe zugegeben, dass selbst er C++ nicht mehr in all seinen Teilen voll verstehe. [ Es gibt halt für verschiedene Teile der Sprache dedizierte Experten. ]
Wenn dem so ist, bleibt einem Anwender von C++ doch gar nichts anderes mehr übrig, als sich auf ein echtes Subset von C++ zu beschränken. Nur die armen Wartungsprogrammierer haben die Möglichkeit nicht (!).
Tatsache ist: Von guten C++ Programmieren geschrieber Code ist für Dritte weit schwieriger zu verstehen als in Java geschriebener.
Programmierer, die sich "optimieren" statt ausdrucksstarken Code zu erzeugen, wüde ich heute eher als schlechte Programmierer bezeichnen. (Kleinteilige vermeintliche Performanceoptimierungen, der Compiler kann das eh besser, braucht kein Mensch mehr.) Verfügbare Features zu verwenden würde ich allerdings als zulässig bzw. sogar wünschenswert erachten. Die STL ist mit ihrem abstrahierenden Anspruch (Datenstrukturen abstrahiert, Algorithmen abstrahiert, Datentypen abstrahiert) schon sehr ambitioniert. Und dann kann man noch Operatoren überladen bis zum Geht-nicht-mehr. Bestes Beispiel sind wohl Sachen wie <<. Überhaupt ist I/O durch die Streams anders als in C. Auch Namespaces. Beides Dinge, womit Anfänger wohl am ehesten in Kontakt geraten. Was vielleicht noch am nahesten an C ist sind Sachen wie typedefs und Präprozessor-Direktiven.
Vielen Dank für den Rat werde ich aufjedenfall berücksichtigen :) Das mit den Libraries habe ich tatsächlich schon öfter gelesen auch wenn ich persönlich noch garnicht weiß was genau die Probleme sind. Das werde ich aber wenn es soweit ist herausfinden :)
Ja, es ist tatsächlich meine erste Sprache und ich bin mir bewusst das es nicht die anfängerfreundlichste Sprache ist im Vergleich zu Python z.B. Das die verschiedenen Programmiersprachen die selben Prinzipien haben wenn man es so nennen kann ist mir bewusst.
Das Problem ist wie gesagt nur, wenn man das große Ganze noch nicht kennt und versteht wie sich Programme oder Software zusammensetzt, den richtigen Anfang in komplexere Gebiete zu finden ohne Studium oder Kurs wo das einem strukturiert beigebracht wird.