Wie kann ich lernen, idiomatisches C ++ zu schreiben?


27

Ich bin ein Informatikstudent, und infolgedessen wurde mir C ++ als eine bessere Version von C mit Klassen beigebracht. Am Ende versuche ich, das Rad immer dann neu zu erfinden, wenn eine Lösung für ein komplexes Problem erforderlich ist. Nur um irgendwann danach eine Sprachfunktion oder eine Standard-Bibliotheksroutine zu finden, hätte ich das möglicherweise für mich tun können.

Ich bin mit meinen char*und *(int*)(someVoidPointer)Redewendungen einverstanden, aber seit kurzem, nachdem ich einen (kleinen) Beitrag zu einem Open-Source-Projekt geleistet habe, sollte man beim Schreiben von C ++ - Code anders denken. Es ist viel anders als C ist.

In Anbetracht dessen, dass ich mich mit objektorientierter Programmierung ziemlich gut auskenne und mit einer steilen Lernkurve einverstanden bin, was würden Sie mir empfehlen, um mich beim Codieren von C ++ auf die C ++ - Spur einzulassen?


7
Basierend auf Ihren Kommentaren kennen Sie die C ++ - Syntax und das ist alles. Sie codieren nicht in C ++. Das C ++ - Tag für Stackoverflow ist ein guter Ausgangspunkt. Es enthält eine Leseliste und häufig gestellte Fragen . Der einzige echte Weg zu lernen ist, Code zu schreiben und erfahrene Benutzer zum Kommentieren zu bewegen. Sie können Ihren Code hier zur Überprüfung ablegen. Ein gutes Beispiel
Martin York

1
Zusammen mit dem Rat von @ LokiAstari (dem ich zustimme) würde ich sagen, dass Ihre Freunde Recht haben, und es wäre wahrscheinlich eine gute Idee , sich durch Accelerated C ++ zu arbeiten. Ich vermute, Sie werden feststellen, dass viel weniger Skimming erforderlich ist, als Sie erwarten - es ist für Personen gedacht, die in Ihrer Position sind, bereits Programmierkenntnisse haben und in erster Linie die Redewendungen des modernen C ++ erlernen müssen.
Jerry Coffin

ja eigentlich abgeschlossen ich die ersten beiden Kapitel, aber das Zeug war meistens , was ich schon wusste - ich einen Autor verstehen nicht nur kommen und ein Buch für schreiben mir , aber :) @LokiAstari Dank für die superinformative Kommentar :)
Yati Sagade

3
@yatisagade Erwarten Sie nicht, dass Ihnen ein Buch in ein paar Kapiteln die Mentalität der Sprache beibringt. Es mag extrem langweilig sein, da Sie die Syntax bereits kennen, aber Sie sollten sich verpflichten, ein paar C ++ - Bücher durchzulesen, alles zu lesen und jede Übung zu machen, als Sie ein absoluter Anfänger der Sprache waren. Falsch unterrichtet zu werden, bedeutet, dass Sie Ihre Anstrengungen verdoppeln müssen, da Sie das Falsche vergessen und die Rechte (oder etwas Ähnliches) lernen müssen.
Yannis

1
Ich bin alle zufrieden mit [...] - (int) (someVoidPointer) Haben Sie schon einmal einen 64-Bit-Build getestet ?
Ed S.

Antworten:


12

Aufgrund Ihrer Kommentare kennen Sie die C ++ - Syntax.
Sie codieren nicht in C ++, sondern in Klassen, auf die häufig als C Bezug genommen wird.

Das C ++ - Tag für Stackoverflow ist ein guter Ausgangspunkt. Es enthält eine Leseliste und häufig gestellte Fragen .

Der einzige echte Weg zu lernen ist, Code zu schreiben und erfahrene Benutzer zum Kommentieren zu bewegen. Sie können Ihren Code hier zur Überprüfung ablegen. Ein gutes Beispiel

Ich fühle mich wohl mit meinen "char *" s

Stoppen Sie die Verwendung, und wechseln Sie zu std :: string.

und (int) (someVoidPointer).

Verwenden Sie sie nicht mehr (abgesehen von der Schnittstelle mit C-Code). Die Verwendung des Funktorkonzepts bietet mehrere Vorteile (einschließlich der Idee des Kapselungszustands).

Nachdem Sie kürzlich einen (geringfügigen) Beitrag zu einem OSS-Projekt geleistet haben, denke ich, dass Sie in C ++ anders denken. Es ist viel anders, obwohl C seinen eigenen Platz hat.

Ja. C und C ++ sind als Sprachen auseinander gegangen. Obwohl Sie praktisch dieselbe Syntax verwenden können, wird als guter C-Code im Allgemeinen kein guter C ++ - Code angesehen (oder umgekehrt).

Einige Freunde haben Accelerated C ++ vorgeschlagen, aber ich weiß wieder, welche Typen und welche Klassen es gibt und was Überladung ist.

Sie haben die Grundlagen.

Wie kann ein (verstümmelter) C ++ - Programmierer, der zufällig mit den OO-Konzepten vertraut ist, idiomatische Programme in der Sprache schreiben?

Mit viel arbeit :-)


Dies ist nicht der einzige Weg. Aus guten Büchern kann man viel lernen.
Dima

1
@Dima: Auf jeden Fall. Aus Büchern kann man viel lernen. Aber nichts wird die Erfahrung übertreffen und die Sprache im Zorn gebrauchen, wenn Sie es nicht noch einmal versuchen und den besten Weg finden, es zu tun. Ich nehme an, Sie können Französisch aus einem Buch lernen, aber ich bezweifle, dass die Franzosen Sie für fließend halten würden.
Martin York

6
IMHO ist der effizienteste Weg zu lernen, mit den Büchern zu beginnen, den richtigen Weg zu erlernen, es in der Praxis zu versuchen und dann Ihren Code von jemandem kritisieren zu lassen.
Dima

@Dima: Ich habe damit kein Argument.
Martin York

12

Das Buch Effective C ++ lehrt eine Reihe interessanter Dinge und bringt Ihnen die Funktionen von C ++ näher. Es gibt auch Effektive STL - Ich habe es nicht gelesen, aber ich bin sicher, es wäre eine gute Lektüre, wenn Sie mit der STD nicht vertraut sind.

Das Wichtigste, was Sie lernen sollten, ist, dass Sie die Sprache verwenden und das Rad nicht ständig neu erfinden . Sie haben bereits gelernt, wie man sie herstellt. Machen Sie es sich (und anderen) leicht und nutzen Sie die Werkzeuge, um ihr gesamtes Potenzial auszuschöpfen.

Als Randnotiz werden Sie auf eine Menge Leute stoßen, die verlangen, dass die STD verwendet wird. Diese Einstellung ist genauso schlecht wie die reine Verwendung char*- manchmal ist sie nicht das richtige Werkzeug und es gibt viele andere. Lassen Sie sich im gleichen Sinne nicht davon abhalten, eigene Containerklassen zu erstellen. Wenn Sie char*den besten Ort dafür verwenden möchten, müssen Sie ihn sicher in eine Klasse einschließen.


Ich kenne die effektive Reihe (habe sie nicht gelesen) - Aber ich denke, sie sind für Best-Practice-Probleme, oder?
Yati Sagade

3
@yati sagade: nein, diese Bücher sind genau das, was du brauchst, um von "C mit Klassen" zu vollwertigem C ++ zu gelangen.
Dima

Ich verstehe - eigentlich hatte ich effektives C ++ von Meyers, das nach Accelerated C ++ aufgereiht war.
Yati Sagade

1
@Dima "Der Zweck dieses Buches ist es, Ihnen zu zeigen, wie Sie C ++ effektiv einsetzen können. Ich gehe davon aus, dass Sie C ++ bereits als Sprache kennen und über einige Erfahrung in der Verwendung verfügen Ihre Software ist verständlich, wartbar, portabel, erweiterbar, effizient und verhält sich wahrscheinlich so, wie Sie es erwarten. "- Effective C ++. Es werden auch einige "Fallstricke" behandelt, die das Lesen interessant machen.
Pubby

1
@Dima: Vorsicht hier. Die 2. Ausgabe richtete sich an neue C ++ - Programmierer aus C. Die (neueste) 3. Ausgabe richtet sich eher an Programmierer aus Sprachen wie Java, C # usw.
sbi

6

Ich kann die jüngste BUILD-Aufnahme von Herb Sutter empfehlen. Der als " Schreiben von modernem C ++ - Code: Wie sich C ++ im Laufe der Jahre entwickelt hat " bezeichnete Code :

Viele Menschen betrachten C ++ als dieselbe Sprache, die sie am College erlebt haben, oder einfach als „C mit Klassen“, aber die C ++ - Sprache hat sich im Laufe der Jahre stark weiterentwickelt. In dieser Sitzung wird erläutert, wie Sie mit C ++ innovative, ausdrucksstarke und ansprechende Apps erstellen können, die leistungsstarke Apps liefern. Machen Sie mit und sehen Sie, wie der neue C ++ 0x-Standard das Schreiben von C ++ so produktiv macht wie viele andere Sprachen.

Die Präsentation ist nicht schlecht, nicht zu lang. Sie enthält einige nette Hinweise auf die neuen Funktionen des neuesten Standards, die Ihnen einige Hinweise geben, wie Sie Ihren alten C / C ++ - Stil aktualisieren können.

Abgesehen davon müssen Sie die STL lernen - es ist nicht kompliziert und es gibt viele Bücher, z. B. Effektive STL oder nur Google für STL-Tutorials, um Sie zum Laufen zu bringen.


+1 Danke. Das war wundervoll. Ich bin froh, dass ich diese Frage gestellt habe. So viele wundervolle Links :)
Yati Sagade

4

Ich habe Accelerated C ++ von Andrew Koenig und Barbara Moo gelesen , um C ++ zu unterrichten, nachdem ich fast ein Jahrzehnt mit C ++ gearbeitet hatte. (Tatsächlich fing ich zu dieser Zeit an, Vorlagen-Metaprogramme zu basteln.) Ich fand es immer noch eine Offenbarung, obwohl ich glaube, dass es mir keine neuen Fakten über die Sprache beibrachte. 1

Ich lernte jedoch, C ++ als Hochsprache zu betrachten und zu verwenden. Um nicht mit rohen Zeigern zu basteln deleteund die Standardbibliothek zu verwenden, wo immer dies möglich ist.

Ich habe das Gefühl, dass Sie genau danach suchen.

1 Damals gab es noch nichts, was mir etwas beibrachte (es gibt auch heute noch viel, ein Jahrzehnt später), aber es gibt nur so viel Wissen, das Sie in ein 250-seitiges Einführungsbuch packen können.


1

Vor der Beantwortung - eine Anmerkung: Idiomatic C ++ ist ein sich bewegendes Ziel. Wenn sich die Sprache ändert, ändern sich auch ihre Redewendungen. In der Tat ist einige Sprach - Feature soll uns mit idiomatischem Code zu tun , weg ermöglichen , die vereinfacht werden könnten oder mit etwas Unterstützung von der Sprache selbst verbessert oder zumindest die Standard - Bibliothek. Denken Sie also daran, dass jede Quelle Sie nur darüber informieren kann, was zum Zeitpunkt des Schreibens idiomatisch war .

Trotzdem tun Sie gut daran, Folgendes zu überprüfen:

Die codereview.SX Seite

Das StackExchange-Netzwerk verfügt über eine Site mit dem Namen codereview.stackexchange.com . Wenn Sie einen Teil des C ++ - Codes geschrieben haben - eine Klasse, einen Teil einer Bibliothek, etwas, das nicht übermäßig groß ist -, können Sie ihn dort veröffentlichen und die Community bitten, ihn zu überprüfen. Beachten Sie, dass der Code kompiliert werden muss und grundsätzlich funktionsfähig sein muss - diese Site ist nicht für das Debuggen vorgesehen.

Außerdem können Sie dort nach C ++ - Code suchen, der sich auf Ihre Arbeit bezieht, und feststellen, worauf die Überprüfer Wert legen. Sie könnten sogar versuchen, den veröffentlichten Code selbst zu überprüfen, ohne eine Antwort zu hinterlassen, und dann lesen, was andere darüber dachten.

Videopräsentationen für C ++ - Konferenzen

Jedes Jahr finden mehrere Entwicklerkonferenzen zum Thema C ++ statt:

und das sind noch nicht einmal die einzigen ... jedenfalls veröffentlicht jeder dieser Beiträge Videos von vielen / allen Präsentationen. Diese werden Ihnen viel beibringen , einschließlich einiger idiomatischer Kodierungen und Prinzipien, mit denen Sie entscheiden können, was idiomatisch sein soll oder nicht.

Manchmal kann man sogar die Schiebedecks der Lautsprecher bekommen.


0

Nun, Open Source-Projekte sind ein sehr guter Anfang. Erwarten Sie nicht, ein professioneller Programmierer zu werden, der auf Ihren Universitätsklassen basiert, sie sind nicht dafür gedacht (wie ich in meiner Antwort hier schrieb ).

Sie scheinen sich der Syntax bewusst zu sein, das ist gut. Lesen Sie jetzt den Code anderer und tragen Sie Ihren eigenen Code für Peer Reviews bei. Sie werden viel lernen, wenn Sie Code lesen und versuchen, ihn zu verstehen, ihn zu debuggen und zu reparieren, und natürlich - indem Sie die bereits vorhandenen Kodierungskonventionen einhalten.

Professionelle Bücher sind, wie bereits erwähnt, ebenfalls eine sehr gute Idee, und das Durchsuchen der Fragen und Antworten auf StackOverflow wird Ihnen viel beibringen.


-1

Das Lesen von viel gutem C ++ - Code wird wahrscheinlich helfen. Sie müssen den Code sehen, um ein Gefühl dafür zu bekommen. Andererseits ist der Großteil des C ++ - Codes falsch.


"Der Großteil des C ++ - Codes ist falsch" - können Sie das klären? Ich habe gesehen, dass die meisten OSS-Projekte tatsächlich einen hohen Qualitätsstandard haben.
Yati Sagade

1
Projekte, ja, aber es führt nicht selten zu schlechten Beispielen.
Coder

1
@yati: Meine Erfahrung mit OSS-Projekten ist das Gegenteil.
sbi

@sbi vielleicht - ich war am Mozilla-Projekt und an Google Chrome beteiligt (hier eigentlich nicht beteiligt, aber Art des Lernens). Fanden ihre Disziplin hervorragend!
Yati Sagade

@yatisagade: Zumindest wurde der meiste existierende C ++ - Code geschrieben, als die Sprache Funktionen hatte, die heute für das Schreiben von gutem Code unerlässlich sind. und der größte Teil des Restes wurde unter Verwendung von Bibliotheken geschrieben, die für die Arbeit mit solch älterem Code geschrieben wurden, so dass dieser neuere Code zu einem gewissen Grad an sie angepasst werden muss. Und das alles unabhängig davon, ob Programmierer die Zeit und Mühe investieren, die für ein anständiges Design und die Implementierung erforderlich sind ...
einpoklum - Monica am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.