C++ lernen: in welcher Reihenfolge?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – Ausgebildeter Softwareentwickler
Biscayne 
Fragesteller
 15.10.2021, 08:47

Vielen Dank, werde ich aufjedenfall machen :)

1

Zuerst Zeiger, dann Arrays und wenn man mit den Instrumenten der imperativen Programmierung durch ist, Objekttechniken.

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich
Biscayne 
Fragesteller
 15.10.2021, 08:52

Vielen Dank :) werde mich direkt mal dran setzen ! :)

1

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

Biscayne 
Fragesteller
 15.10.2021, 08:46

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.

1
heizfeld  15.10.2021, 09:00
@Biscayne

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.

1
Biscayne 
Fragesteller
 15.10.2021, 09:10
@heizfeld

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

1
heizfeld  15.10.2021, 09:16
@Biscayne

Es ist auch ganz gut, ein kleines Projekt zu realisieren, wo du praktisch die Befehle lernt, wenn du sie brauchst

0

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.

Biscayne 
Fragesteller
 15.10.2021, 09:04

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

1
wunschname0302  15.10.2021, 09:53

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.

0
grtgrt  15.10.2021, 10:05
@wunschname0302

Templates sind mit Sicherheit das Highlight von C++ (für die kurzen Programme, die man als Anfänger schreibt, aber völlig unerheblich).

1
wunschname0302  15.10.2021, 10:12
@grtgrt

Der Artikel (habe ihn nur quer gelesen) spricht glaube ziemlich viel von dem an, an das ich dachte.

0
grtgrt  15.10.2021, 10:16
@wunschname0302

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?

1
wunschname0302  15.10.2021, 10:42
@grtgrt

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"...)

0
grtgrt  15.10.2021, 10:55
@wunschname0302

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?

0
grtgrt  15.10.2021, 11:13
@wunschname0302
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.

0
wunschname0302  15.10.2021, 11:13
@grtgrt

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.

0
grtgrt  15.10.2021, 11:23
@wunschname0302

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.

0
grtgrt  15.10.2021, 11:27
@grtgrt

Mit "guten" C++ Programmierern meine ich solche, die den Ehrgeiz haben, möglichst viele Features von C++ zu kennen und zu nutzen (um auf uns arme anderen mitleidig runtersehen zu können).

0
wunschname0302  15.10.2021, 11:51
@grtgrt

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.

1