Jackery IFA Fireplace

Grundlagen C++, wie gehts weiter?

H

hobbicon

Gast
Ich habe vor wenigen Tagen eine Klausur über die Einführung in C++ geschrieben und beherrsche jetzt die grundlegendsten Dinge, wie Schleifen, Funktionen, Klassen, etc.

Jetzt habe ich Blut geleckt und möchte mich selbstständig weiterentwickeln.

Hat da jemand eine Empfehlung?
 
Ein Projekt suchen.

Zum Beispiel einen kleinen eigenen Mail-Clienten. Nettes Projekt und von allem was drin.
 
ich fand irc bot auch ganz cool am Anfang da haste auch ne menge dabei.
Wobei ich jetzt in c keine sockets mehr machen möchte ^^
 
Soll ich mir bestimmte Lernmaterialen kaufen, oder findet man dazu genügend im Internet?
 
Joa du solltest dir schon gescheite Literatur besorgen, wenn du die Grundlagen beherrschst dann ist das noch lange nicht alles. Du solltest das Prinzip der Objektorientierten Programmierung verstehen, möglichst generischen Code schreiben (Das geht in C++ wunderbar).

Projekte gibts viele, so eine Netzwerksache ist eigentlich immer ganz cool, dort gibt es viel zu lernen. Ansonsten ist sowas wie mp3 Verwaltung/Player gut, kannst dir ja mal ID3 Tags usw. anschauen und die irgendwie auswerten. Ich hab sowas mal gemacht und mir hats spass gemacht.

Du kannst dir auch einen Webserver schreiben, der rudimentär das HTTP Protokoll unterstützt. Ist gar nicht so heikel wie man denken würde und führt dich in viele verschiedene Bereiche.
 
Ich fand kleine Spiele immer recht motivierend. Erst auf Konsole und dann wenn alles funktioniert, baust du ein GUI dafür. Dabei wirst du auch direkt merken, ob dein Programmaufbau so einen Umbau überhaupt erlaubt und sowas merkt man sich und macht es beim nächsten Anlauf besser.
Am besten ein simples Brett- oder Kartenspiel. Da kann man dann, wenn man sich immer noch unterfordert fühlt, eine kleine KI als Gegenspieler bauen oder man beschäftigt sich mit Netzwerkkommunikation für eine Multiplayervariante.

Kaufen brauchst du dazu nichts. Die Grundlagen kannst du doch. Die Materialien kauen das eh nur alles noch mal durch, was du schon weißt. Bastel los und stell fest, wo deine Wissenslücken liegen und dann kannst du ganz gezielt nach diesem nötigen Wissen suchen. Irgendwelche Tutorials abtippen bringt meines Erachtens gar nichts.
 
kannst mir ja ein programm schreiben, wo man die exif infos von einem bild ganz schnell anzeigen lässt, dann muss ich nicht immer erst irfanview aufrufen. :)
 
Ein kleines Programm zum Verschlüsseln und Chiffrieren ist auch 'ne schöne Sache. Dann noch eins, was das wieder knackt und man kann parallel prima Paranoia entwickeln.
 
Da in der Auflistung Templates fehlen: Wenn nicht schon geschehen, umbedingt anschauen! Umgang mit der STL antrainieren!
Wenn nicht gleich C++11 gelernt, dann von Rainer Grimm "C++11" kaufen. Über Lamda-Funktionen freuen und massenhaft mit der STL einsetzen. Es gibt irgendwie genügend Leute die schaffen die STL Algorithmen irgendwie zu übersehen...
Fortgeschrittene Bücher wären bspw. Effektiv C++ von Scott Meyers, einer Sammlung von 55 Tipps über Stil/Lösungen bestimmter Probleme in C++
Wenn nicht eh schon erlernt, das grafische Toolkit Qt anschauen. Das ist recht C++ mäßig designt, bei dessen Verwendung verbessert sich das Gefühl für OOP fast von alleine.
Auf jedenfall nicht zuviel Programmieren bevor man in weiterführende Literatur schaut, sonst ärgert man sich wie beschissen man zuvor programmierte. Wie schon erwähnt möglischt generisch programmieren üben. Wenn du irgendwo auch nur in Versuchung kommen solltest mehr als zehn Zeilen zu kopieren um an anderen Stelle in leicht abgewandelter Form wiederzuverwenden läuft was falsch. Zu langer C++ Code ist einfach unleserlich.
C++ Grundlagen sind nicht ausreichend! Man kann auch Probleme mit langem schlechtem Code lösen, weswegen man da nicht gezielt nach im Internet suchen wird, weil ja auch so gelöst. Es geht nichts über Fachliteratur!

Und der einfachste Tipp: Sich mit vernünftigen Tools um C++ herum auseinandersetzen, wie Versionsverwaltung mit Git, Dokumentation mit Doxygen und so weiter...
 
Hey cool, so einen Thread wollte ich eigentlich in Zukunft auch mal erstellen, obwohl ich schon seit einigen Jahren immer mal wieder mit C++ rumspiele.

Was mir ziemlich viel Spaß gemacht hat war das basteln eines kleines HTML-Clients. Leider ist mir bei nem Festplattencrash der Großteil davon verloren gegangen aber das anstrengendste daran waren eigentlich die Sockets und das HTML-Protokoll. Zu beidem gibt es aber genug im Inet :)
Mail-Client: Super Idee! Das mach ich glaub ich mal demnächst :D
Einen IRC-Bot habe ich auch vor langer Zeit mal angefangen aber damals war ich wohl noch zu jung um so ein Projekt auch durchzuziehen bzw. vorher vernünftig zu planen.

OOP ist ganz wichtig aber zählt eigentlich auch schon zu den Grundlagen. Wer das nicht drauf hat kann eigentlich auch kein C++. Das ist jedenfalls meine Meinung. Also unbedingt verinnerlichen, wenn das nicht schon geschehen ist.

Wo man auch noch öfter drüberstolpert ist die Win32-API. Da werde ich mich wohl als nächstes mal mit beschäftigen. Eigentlich habe ich mir das schon öfter vorgenommen, habe mich dann aber nie dazu durchgerungen :D

Spaß machen kann auch das Herumspielen mit OpenGL oder DirectX. Aber das sind dann gleich schon größere Projekte.

Was QT angeht: ich dachte das wird nicht mehr weiterentwickelt? Oder verwechsel ich das gerade mit irgendwas Anderem? Jedenfalls kann ich mich daran erinnern, dass es Probleme gegeben hat, als ich das mal ausprobieren wollte.
 
Ich würde dir jetzt eher nicht zu Büchern raten, im Internet findest du schneller spezifische Beispiele und die Funktionen kannste dir dann auch gleich genau anschauen.
Ich habe C++ erst richtig gut gerlernt, als ich angefangen habe in 2D zu Programmieren. Habe mir dazu aber ne Engine geholt (vergiss mal DirectX oder OpenGL ist zu kompliziert).
Danach gings dann ins Dreidimensionale und weiter mit Detours zu Wallhacks etc.
Schon praktisch wenn manns selber proggen kann :D

LG Tigerass
 
daemon777 schrieb:
Hey cool, so einen Thread wollte ich eigentlich in Zukunft
Was QT angeht: ich dachte das wird nicht mehr weiterentwickelt? Oder verwechsel ich das gerade mit irgendwas Anderem? Jedenfalls kann ich mich daran erinnern, dass es Probleme gegeben hat, als ich das mal ausprobieren wollte.
Qt wurde gerade von Nokia an Digia verkauft. Der Laden ist ungleich kleiner und eine Niederlassung in Australien wurde bereits aufgelöst, unteranderem deswegen verzögert sich Qt 5.0. Eingestellt wurde es aber definitiv nicht.
 
Hoppala. Ja natürlich mein ich das HTTP-Protokoll. Was ich eigentlich sagen wollte war, dass ich damit HTML-Seiten übermittelt habe :D

Also Korrektur: HTTP-Server :)


@geisterfahrer

Danke für das Update. Dann ist es ja sicherlich interessant sich das doch nochmal anzuschauen.
 
Hallo hobbicon,
hobbicon schrieb:
Ich habe vor wenigen Tagen eine Klausur über die Einführung in C++ geschrieben und beherrsche jetzt die grundlegendsten Dinge, wie Schleifen, Funktionen, Klassen, etc. Jetzt habe ich Blut geleckt und möchte mich selbstständig weiterentwickeln.
Hat da jemand eine Empfehlung?

Ich würde mal mit ganz grundlegenden Dingen ohne Grafik oder externe Bibliotheken anfangen - um erstmal ein Gefühl für die Sprache, Datentypen, Laufzeiten und die verwendete Entwicklungsumgebung zu bekommen.

Hier eine einfache Aufgabe von mir:

Es sei ein Volumen (Spielfeld in 3D) der Größe 256 x 256 x 256 (Meter oder Callycaps oder egal) gegeben. In diesem Volumen werden 1 Million Raumschiffe (Kugeln mit dem Durchmesser 1) völlig zufällig plaziert (Gleitkommakoordinaten, Datentyp float).

  1. wie viele der Raumschiffe überlappen sich (Abstand < 1)?
  2. wie kann man es anstellen, daß sich die Raumschiffe beim Einfügen nicht mehr überlappen?
  3. Alle Abstände der Raumschiffe von allen Raumschiffen berechnen und damit ein Histogramm von 0 bis 32 aufbauen (32 ist die Sensorreichweite des Raumschiffradars) (notieren wie lange eine solche Berechnung dauert).
  4. Wie kann man ein Volumen (3D-Spielfeld) erhalten, das keine "Würfelwände" mehr besitzt? (=> siehe periodische Randbedingungen)
  5. Alle Werte unter der Bedingung periodischer Randbedingungen neu berechnen.
  6. Ein Volumen-Aufteilungsschema aufstellen, so daß alle Abstände zwischen allen Raumschiffen in weniger als einer Sekunde (auf einem normalen ~3GHz-Prozessor) berechnet werden können.

Viel Spaß
 
Die beiden Bücher sind grundverschieden!
"Effektiv C++ programmieren" hat nichts weiter mit C++11 zu tun, da werden Stil-Empfehlungen ausgesprochen um bestimmte Probleme zu vermeiden - die gute Nachricht: die sind soweit auch mit C++11 noch gültig (das Vorwort der aktuellsten Auflage verliert dazu ein paar Worte), aber Empfehlungen speziell zu C++11 werden keine gegeben.
Das zweitgenannte Buch aktualisiert ja nur das generelle Sprachwissen auf C++11 Stand, also Syntax-Erweiterungn und Standardbibliothekserweiterungen und gibt keine Empfehlungen wie man dies verwenden sollte (vermutlich, ich hab das genannte Buch nicht gelesen, aber es sieht dem, was ich gelesen habe recht ähnlich aus).
Also ums noch anders zu formulieren: Das eine lehrt wie man mit der Sprache umgeht, das andere Buch lehrt die Sprache selber (bzw. was eben neu ist - das zweitgenannte Buch wird mit der Zeit überflüssig, wenn die Anfängerbücher aktualisiert sind. Das Buch ist was für Leute die eben schon C++98 können, und auf den neuen Sprachstandard upgraden wollen)
Dadurch das C++11 noch so jung ist, ist man sich in der C++ Welt auch noch nicht so recht einig, wie der beste Umgang mit den neuen Sprachfeatures aussieht. Die Erfahrungen fehlen, also kann es solche Bücher "Erfahrungsbücher" wie Effektiv C++ noch nicht geben. Solche Bücher werden erst mit der Zeit erscheinen. Auch bei C++98 hat es eine Weile gedauert, bis man sie vollständig beherrschte (z.B. das der Template Mechanismus im Prinzip eine eigene Sprache darstellt, mit der man beliebige Berechnungen durchführen kann war nie geplant wesen, hat man nur irgendwann herausgefunden). Im Prinzip ein schlechter Zeitpunkt sich mit C++ Büchern einzudecken, da eben so wenig C++11 berücksichtigt wird.
 
.
 
Zuletzt bearbeitet: (delete)
Zuletzt bearbeitet:
Danke euch beiden. Da werde ich nochmal ein wenig drüber nachdenken müssen. Im Prinzip eilt es ja auch nicht, sondern ich will einfach meine Kenntnisse etwas erweitern. Das Thema Multithreading ist für mich hier derzeit besonders interessant. Das ist natürlich schön, dass es hier wohl auch neue Konzepte zu gibt.

Welche Compiler unterstützen derzeit denn eigentlich den C++11-Standard? Kann der VC2012 das? Zumindest müsste ich mal von meiner VC2010-Expressversion runter :D
 
Zurück
Oben