Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Programmierung: Vier Bücher und fünf Klassiker

C++-Programmierung: Vier Bücher und fünf Klassiker

黄舟
黄舟Original
2017-02-06 14:12:571355Durchsuche

C++ ist eine große Sprache, die in der industriellen Softwareentwicklung weit verbreitet ist. Aufgrund seiner eigenen Komplexität und Fähigkeit, reale Probleme zu lösen, ist es von großem akademischem Forschungswert und industriellem Wert. Wie die Sprache C war auch C++ in vielen wichtigen Bereichen sehr erfolgreich.


Eine unbestreitbare Realität ist jedoch, dass C++ im Bereich der Low-Level-Programmierung C verdrängt und auch unter der starken Erholung von C leidet Im Bereich der High-Level-Programmierung dringen Java und C# ständig in das Territorium von C++ vor. Vielleicht wird die Integration von C++ und C immer ein Traum bleiben. Vielleicht wird die Begeisterung für Java und C# C++ irgendwann dazu zwingen, zu seinen Wurzeln zurückzukehren – zurück zu den Entwicklungsbereichen, in denen es grundlegende Vorteile hat: Low-Level-Systemprogrammierung, fortgeschrittene Großanwendungen. Skalieren Sie Hochleistungsanwendungsdesign, eingebettete Programmierung und numerisches wissenschaftliches Rechnen usw. Wenn ja, denke ich, dass das keine schlechte Sache ist.


C++ hat so viele intellektuelle Investitionen angezogen, dass es auf diesem Gebiet unzählige herausragende Werke gibt, darunter schwergewichtige Softwareprodukte, Bibliotheken und Bücher. Eine weniger strenge Bedeutung des Titels „Vier Bücher und fünf Klassiker der C++-Programmierung“ ist: Vier Bücher der C++-Programmierung ⅹ Fünf Klassiker. Ja, in diesem Artikel (und im nächsten) werde ich mehr als 20 gute C++-Bücher nach Kategorie empfehlen, und Sie können sie entsprechend Ihren eigenen Bedürfnissen lesen.


TCPL und D&E


TCPL und D&E sind „Die C++-Programmiersprache“ und „Das Design und die Evolution“ bzw. von C++", beide geschrieben von Bjarne Stroustrup. Ich liste sie separat auf, erstens, weil Bjarne der Schöpfer der C++-Sprache ist, und zweitens aus einem wichtigeren Grund als „erstens“: Diese beiden Bücher sind unbestreitbare Meisterwerke auf dem Gebiet von C++. Es ist keine Übertreibung zu sagen, dass sie die Bibel der C++-Sprache sind.


Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition)


《C++ Programming Language (Special Edition) )“, Machinery Industry Press


„C++ Programming Language (Special Edition) (English Photocopy Edition)“, Higher Education Press


Bis heute ist TCPL neben dem C++-Standarddokument das maßgeblichste C++-Referenzhandbuch. Im Gegensatz zu den meisten Menschen denke ich, dass Bjarnes geschriebene Sprache der von ihm geschaffenen Programmiersprache nicht nachsteht. Zumindest gefällt mir diese Art akademischer Arbeit. Die Beschreibung der Sprache C++ in diesem Buch ist klar und unkompliziert. Es betrachtet C++ aus der Perspektive des Erstellers der Sprache, was kein anderer Autor oder Buch kann – niemand weiß besser, wie man C++ verwendet als Bjarne selbst.


Dies ist ein seriöses Buch, das sich an fortgeschrittene und fortgeschrittene C++-Entwickler richtet. Wenn Sie ein erfahrener C++-Programmierer sind und grundlegendere C++-Kenntnisse benötigen, ist dieses Buch genau das Richtige für Sie. Es ist nicht die Art von kleinem Buch, das einen zum Lachen bringt, nachdem man es gelesen hat. Es muss sorgfältig verstanden und immer wieder durchgekaut werden. Bitte achten Sie beim Lesen besonders darauf, was Herr Bjarne hervorhebt und was er in einem Satz erwähnt. Mir persönlich gefällt der vierte Teil dieses Buches „Entwerfen mit C++“. Es ist schwierig, solche Inhalte in ähnlichen Programmiersprachenbüchern zu finden – ich denke sogar, dass Bjarne diesen Teil als separates Buch schreiben sollte.


Bjarne Stroustrup, The Design and Evolution of C++


《The Design and Evolution of C++ Language》, Machinery Branchenverleger


"The Design and Evolution of C++ Language (English Edition)", Machinery Industry Press


D&E Es handelt sich um eine Monographie über C++-Sprachdesignprinzipien, Designentscheidungen und Designphilosophie. Es gibt eine klare Antwort darauf, warum C++ zu dem wurde, was es heute ist, und nicht zu einer anderen Sprache. Als Schöpfer der C++-Sprache hat Bjarne seine einzigartigen und tiefgreifenden Erkenntnisse anschaulich unter Beweis gestellt. Zusätzlich zu den weithin gelobten Sprachfunktionen scheute Bjarne nicht vor den kontroversen oder sogar abgelehnten C++-Funktionen zurück. Er gab eine nach der anderen logisch fundierte und überzeugende Erklärungen. Der Inhalt deckt die prähistorische Ära von C++, C mit Klassen, C++-Entwurfsregeln, Standardisierung, Bibliotheken, Speicherverwaltung, Mehrfachvererbung, Vorlagen usw. ab. Außerdem bietet er eine Einführung in wichtige neue Funktionen, einschließlich Ausnahmemechanismen, Laufzeittypinformationen und Namespaces. wurden jeweils ausführlich besprochen. Jeder C++-Programmierer sollte in der Lage sein, sein Verständnis der Sprache anhand von Bjarnes Erklärung zu vertiefen.


Ich muss Sie noch einmal daran erinnern, dass diese beiden Bücher komprimiertes Wissen und eine riesige Menge an Informationen enthalten. Bitte verpassen Sie nicht jeden scheinbar beiläufigen Satz von Bjarne.


Einführungs-Tutorial


Das Erlernen einer beliebigen Sprache erfordert einen schrittweisen Prozess vom Einstieg bis zur Beherrschung, vom Anfänger an Prozess zu meistern. Für einen sogenannten Neuling ist es jedoch schwierig zu entscheiden, ob er ein völliger Neuling ist, ein „Neuling“, der sich mit einer anderen Sprache auskennt, oder gar ein Meister, der auf dem Gebiet der Programmierung in einer bestimmten Sprache beachtliche Erfolge erzielt hat . Verallgemeinern? Unterschiedliche C++-Neulinge benötigen unterschiedliche Einführungsbücher.


Andrew Koenig, Barbara E. Moo, Accelerated C++: Praktische Programmierung anhand von Beispielen


《Accelerated C++ Chinese version 》, China Electric Power Press


Im Gegensatz zu den meisten C++-Tutorials auf dem Markt beginnt dieses Buch nicht mit „C in C++“, sondern mit authentischen C++-Funktionen. Von Anfang an wird die Standardbibliothek zum Schreiben von Programmen verwendet. Mit zunehmender Tiefe der Beschreibung werden die Grundkonzepte, von denen diese Standardbibliothekskomponenten abhängen, einzeln erläutert. Darüber hinaus werden in diesem Buch im Gegensatz zu anderen C++-Lehrbüchern Beispiele zur Erläuterung der Sprache und der Standardbibliothek verwendet. Die beiden letztgenannten werden zur Unterstützung von Beispielprogrammen erläutert und nicht nur als Hilfsmittel zur Demonstration von Sprachfunktionen und Standardbibliotheksnutzung.


Der Autor ist Weltklasse in Programmierpraxis, Aus- und Weiterbildung sowie technischem Schreiben im Bereich C++. Ich mag diesen erfrischenden Schreibstil, der die Standardbibliothek und die nativen Funktionen der C++-Sprache intensiv nutzt. Vor diesem Lehrbuch stehen fast alle bisherigen C++-Lehrbücher in den Schatten oder erscheinen veraltet. Obwohl dieses Lehrbuch für die inländische Hochschulbildung ein wenig avantgardistisch sein mag, kann ich es meinen Kollegen dennoch wärmstens empfehlen. Übrigens hat Bjarne und ich kürzlich in einer Korrespondenz zu diesem Buch Folgendes kommentiert: Für erfahrene Programmierer, die C++ lernen, ist dieses Buch möglicherweise das beste Buch der Welt.


Stanley B.Lippman, Josee Lajoie, C++ Primer (3. Auflage)


《C++ Primer (3RD) Chinesische Ausgabe“, China Electric Power Publishing House


Der Name dieses Buches ist etwas irreführend. Obwohl der Autor behauptet, dass dieses Buch für C++-Neulinge geschrieben ist, deuten sowohl der Umfang als auch die Tiefe der Erklärungen auf etwas anderes hin. Vielleicht wäre es angemessener, es als C++-Tutorial „vom Anfänger bis zum Experten“ zu bezeichnen. Ich persönlich denke, dass es nicht für Anfänger geeignet ist, die überhaupt keine C++-Kenntnisse haben – bevor Sie dieses Buch lesen, sollten Sie zumindest ein wenig Hintergrundwissen in C oder C++ haben, oder zumindest etwas Programmiererfahrung in anderen Sprachen.


Obwohl in diesem Buch die Diskussion einiger erweiterter C++-Funktionen weggelassen wird, kann es dennoch als das bislang umfassendste C++-Lerntutorial bezeichnet werden. Wenn ein C++-Anfänger dieses Buch bodenständig lesen und alle Übungen gemäß dem „C++ Primer Answer Book“ absolvieren kann, wird er mit seinem Niveau auf jeden Fall in die Reihen der professionellen C++-Programmierer aufsteigen können. Ich persönlich denke, dass dieses Buch auch dann wertvoll ist, wenn Sie TCPL bereits besitzen, da es in vielerlei Hinsicht detaillierter und leichter zu verstehen ist als TCPL.


Stanley B. Lippman, Essential C++


"Essential C++ Chinese Edition", Huazhong University of Science and Technology Drücken Sie


"Essential C++ (Photocopy Edition)", China Electric Power Publishing House


Dieses Buch kann in Betracht gezogen werden weniger streng Das Buch ist eine komprimierte Version von „C++ Primer“. In diesem Buch werden nacheinander die repräsentativsten Themen in C++ beschrieben, darunter prozedurale Programmierung, generische Programmierung, objektbasierte Programmierung, objektorientierte Programmierung, Vorlagenprogrammierung und Ausnahmebehandlung. Stanley senkt die Schwelle auf das grundlegendste Niveau, das für C++-Neulinge „mit Erfahrung in der Programmierung in anderen Sprachen“ akzeptabel ist, und ermöglicht ihnen so, schnell mit dem Programmieren in C++ zu beginnen, ohne einen Wälzer wie „C++ Primer“ lesen zu müssen. Es leitet das Lernen anhand von Beispielen an und soll es den Lesern ermöglichen, die Essenz von C++ in kürzester Zeit zu verstehen.


Vielleicht würde eine andere Person Hunderte von Seiten benötigen, um alle Aspekte des C++-Programmierparadigmas (Paradigma) zu beschreiben, aber dieses kleine Buch schafft es unglaublich gut. Ich persönlich mag diese Art von Buch, das voller Techniken steckt, prägnant ist und etwas zu sagen hat. Dieses Buch hat auch einen offensichtlichen Stil: Alle Programmbeispiele verwenden Standardbibliothekskomponenten, was erfrischend ist.


Keines der oben genannten drei Bücher ist für absolute Programmieranfänger geschrieben. Komplette Anfänger in der C++-Programmierung können Francis Glassborows neues Buch (noch nicht veröffentlicht) lesen: „A Beginners Introduction to Computer Programming: You Can Do It!“. Dies wird auch von Bjarne empfohlen. Francis Glassborow ist der Präsident von ACCU. Er hat im Laufe der Jahre fast jeden C++-Klassiker kommentiert. Sein eigenes Buch wird natürlich großes Interesse in der C++-Community wecken.


Effiziente und robuste Programmierung


Ich habe diesen Code vor zwei Jahren geschrieben, als ich für eine Provinzmacht verantwortlich war Dispatching-Systemprojekt Ein Gateway-Programm, das Echtzeit-Leistungsinformationen vom SCADA-System erhält. Die Kommunikationsschnittstelle verwendet eine ungewöhnliche direkte Datenbankverbindungsmethode (dieses Gateway-Programm stellt auf der einen Seite eine Verbindung zu SQL Server 6.5 und auf der anderen Seite zu Oralce 8.1.6 her). Da es fast zehntausend Echtzeit-Messpunkte gibt, ist es offensichtlich ineffizient, jedes Mal alle Proben zu aktualisieren oder einzufügen. Ich habe im Gateway-Programm eine Speicherbibliothek erstellt, in der zunächst die erhaltenen Daten verglichen werden, und dann wird entschieden, ob die physische Datenbank aktualisiert werden soll (und es werden auch andere kompliziertere Dinge erledigt ...), wodurch die Effizienz und die Ressourcennutzung verbessert werden . Der erwartete Effekt wurde erreicht.


Dieses Programm lief sehr gut, aber einen Tag nach dem Verlassen der Site rief der Systemadministrator an und sagte, dass das Gateway-Programm manchmal aufgrund eines Netzwerkfehlers oder aus anderen Gründen abstürzen würde – es würde einfach von selbst abstürzen Das Problem ist, dass dadurch auch Windows 2000 Advanced Server in einen „Bluescreen“ verwandelt wird! Ehrlich gesagt habe ich noch nie ein unbeabsichtigtes Programm gesehen, das dies getan hat. Da ich zu diesem Zeitpunkt mit einem anderen großen Projekt beschäftigt war, konnte ich die Website nicht zum Debuggen aufrufen. Am Ende musste ich den Code der Speicherbibliothek aufgrund meiner Erfahrung sorgfältig mit Ausnahmebehandlungscode kapseln (und auch einige andere Änderungen vornehmen). ...). Auf diese Weise ist das Problem zwar nicht vollständig gelöst, aber das Programm ist doch nicht mehr so ​​hässlich.


Was bringt es, hier so einen Leckerbissen zu erzählen (ich dachte nicht, dass es ein „Tippen“ war, als ich an diesen schrecklichen Käfer dachte)? Was ich sagen möchte ist, dass es für jede Software keine Effizienz ohne Robustheit gibt. Für C++-Programmierer ist es vielleicht nicht schwierig, ein effizientes Programm zu schreiben, aber es ist nicht so einfach, eine serverseitige Software zu schreiben, die rund um die Uhr laufen muss. Viele Faktoren müssen berücksichtigt werden, und manchmal sind diese Faktoren sogar weit entfernt Jenseits der C++-Sprache und der Entwicklungstools selbst. Als Programmierer, der tatsächliche Projektsoftware entwickelt, müssen wir nicht selbst an die Wand stoßen, um Erfahrungen zu sammeln. Solange wir bescheiden genug sind, sind die Erfahrungen anderer oft eine gute Referenz für uns. Vor diesem Hintergrund empfehle ich Ihnen die Lektüre der folgenden Bücher, die Ihnen sowohl von der Robustheit als auch von der Effizienz profitieren werden (natürlich decken sie weit mehr ab als nur die Ausnahmebehandlung).


Scott Meyers, Effective C++: 50 Specific Ways to Improve Your Programs and Design (2. Auflage)


Scott Meyers, Effektiveres C++: 35 neue Möglichkeiten zur Verbesserung Ihrer Programme und Designs


《Effective C++ Chinese Edition》, Huazhong University of Science and Technology Press


„Effektivere C++-Chinese-Ausgabe“, China Electric Power Publishing House


„Effektiveres C++ (Fotokopieversion)“, China Electric Power Publishing House


Wenn „Effective C++“ hauptsächlich einige relativ grundlegende Konzepte und Techniken in C++ bespricht, dann konzentriert sich „More Effective C++“ auf eine Reihe fortgeschrittener Konzepte und Techniken, einschließlich der Ausnahmebehandlung . Technologie. Im Vergleich zu Ersterem weist Letzteres zwei Hauptunterschiede auf: Erstens enthält es viele neue Standard-C++-Inhalte, zweitens sind die behandelten Themen eher „strategischer“ als „taktischer“ Natur und die Diskussionen sind tiefer und gründlicher . Insbesondere die ausführliche Diskussion von Technologien und Mustern wie virtuellen Destruktoren, intelligenten Zeigern, Referenzzählung und Proxy-Klassen ist in einem so kleinen Buch kaum vorstellbar.


Mit komfortablen technischen Fähigkeiten und hervorragenden Schreibfähigkeiten ist Scott zweifellos einer der besten technischen C++-Autoren der Welt. Beide Bücher zeichnen sich durch Einfachheit, Klarheit und Lesbarkeit aus. Kurz gesagt, die 85 von Scott bereitgestellten Methoden zur Verbesserung von Programmierkenntnissen und Design Thinking sind allesamt wesentliche Fähigkeiten für fortgeschrittene und fortgeschrittene C++-Programmierer. Ich kann beide Bücher wärmstens empfehlen (es gibt tatsächlich noch eines, wie Sie später sehen werden).


Herb Sutter, außergewöhnliches C++: 47 technische Rätsel, Programmierprobleme und Lösungen


Herb Sutter, außergewöhnlicher C++: 40 neue technische Rätsel, Programmierprobleme und Lösungen


„Exceptional C++ Chinese Edition“, China Electric Power Publishing House


„More Exceptional C++ Chinese Edition“, Huazhong University of Science and Technology Press


Betrachten Sie sich selbst als C++-Sprachexperte? Lesen Sie diese beiden Bücher des Generalsekretärs des ISO C++ Standards Committee, bevor Sie antworten. In diesen beiden Büchern verwendet Herb einen „Frage-und-Antwort“-Ansatz, um Sie beim Erlernen der C++-Sprachfunktionen zu unterstützen. Für jedes Thema stellt sich Herb zunächst vernünftig Ihre Fragen und Verwirrungen vor, vermutet dann, dass Ihre Antworten wahrscheinlich falsch sind, gibt Ihnen dann Hinweise und schlägt die besten Lösungen vor und fasst schließlich zusammen, wie Sie ähnliche Probleme lösen können.


Diese beiden Bücher sind typische Werke, die sich mit den Details der C++-Sprache befassen. Sie sind sehr dünn, aber der Inhalt ist dicht und übertrifft die beiden Bücher von Scott bei weitem ist sehr zeitaufwändig zu lesen – ich persönlich finde sie viel schwieriger zu verstehen als Scotts Bücher. Es würde mindestens mehrere Monate dauern, das in diesen beiden schlanken Büchern enthaltene Wissen zu studieren! (In Scotts Vorwort gab er zu, dass er mehr als einmal in die Falle von GotW-Problemen getappt war. Sie sollten wissen, was das bedeutet.) Welche Vorteile hat es, die Details der Sprache zu studieren? Obwohl wir uns in den meisten Fällen nicht darum kümmern müssen, was hinter den Kulissen im C++-Code vor sich geht, können uns diese beiden Bücher gute Hinweise geben, weil sie die subtilen, aber entscheidenden Aspekte der C++-Sprache enthüllen .


Stephen C. Dewhurst, C++-Fallstricke: Häufige Probleme bei Codierung und Design vermeiden


《Fallstricke bei der C++-Programmierung 》 , China Youth Publishing House


Stephens theoretisches Wissen und seine praktische Erfahrung machen dieses Buch zu einem lesenswerten Buch. Stephen war einer der ersten C++-Benutzer bei Bell Labs. Er hat C++ erfolgreich zur Lösung von Problemen in Bereichen wie Compiler, Wertpapierhandel, E-Commerce und eingebettete Systeme eingesetzt. Dieses Buch vereint 99 Programmiererkenntnisse aus der Frontline-Entwicklungserfahrung des Autors. Wenn Sie sie verstehen, können Sie fast alle gängigen C++-Design- und Programmierprobleme vermeiden.


Ich denke sogar, dass die Lektüre dieses Buches für Anfänger in der C++-Programmierung einfacher und unmittelbarer sein wird als die Lektüre des Buches von Scott und Herb. Mir persönlich gefällt der Schreibstil dieses Buches – viele von Stephens Ansichten mögen extrem erscheinen, sind aber unwiderlegbar. Natürlich beruht dieses Selbstvertrauen (und dieser trockene Humor) auf der profunden technischen Kompetenz des Autors und nicht auf arroganter Paranoia.


Zusätzlich zu den oben empfohlenen Büchern: „Efficient C++: Performance Programming Techniques“, gemeinsam verfasst von Dov Bulka und David Mayhew („Programming Techniques to Improve C++ Performance“, Auch der Verlag Tsinghua University ist einen Blick wert. Dieses schlanke kleine Buch konzentriert sich auf die Entwicklung leistungsstarker C++-Anwendungen. Die beiden Autoren sind beide IBM-Softwareexperten und arbeiten beide im Bereich der Systemkonstruktion mit extrem hohen Leistungsanforderungen. Auf ihren Erfahrungen basiert dieses Buch. Manche Leute mögen dieses Buch nicht, weil es viel Zeit damit verbringt, über Dinge zu sprechen, die nichts mit C++ zu tun haben, aber ich mag dieses Buch genau deshalb. Es sind diese Dinge, die meinen Horizont erweitert haben.


Vorlagen- und generische Programmierung


Vorlagen- und vorlagenbasierte generische Programmierung sind heute zweifellos die am aktivsten entwickelte C++-Programmierung Technologie. Die erste revolutionäre Anwendung von Vorlagen war STL, die die Anwendung der Vorlagentechnologie in den Bereichen generische Container und Algorithmen vollständig demonstrierte. Moderne Bibliotheken wie Boost und Loki maximieren weiterhin das Potenzial der Vorlagentechnologie. Im Bereich Templates und generische Programmierung empfehle ich die folgenden zwei schwergewichtigen Bücher:


David Vandevoorde, Nicolai M. Josuttis, C++ Templates: The Complete Guide


"Überblick über C++-Vorlagen (traditionelle chinesische Version)", Taiwan Qifeng Information Co., Ltd.


"Überblick über C++ Vorlagen (traditionelle chinesische Version) „Vereinfachte Version)“, People's Posts and Telecommunications Publishing House


Es gibt eine altmodische Art, ein Buch zu loben, die ungefähr „Wenn“ lautet Wenn Sie dieses Buch nicht gelesen haben, können Sie „Erde“ machen, was Sie wollen, es enthält oft übertriebene Elemente. Wenn Sie jedoch sagen: „Sie können die C++-Vorlagenprogrammierung nicht beherrschen, ohne „C++-Vorlagen: Das komplette Handbuch“ gelesen zu haben, dann trifft diese Behauptung auf die überwiegende Mehrheit der C++-Programmierer auf der Welt zu.


Dieses Buch füllt eine langjährige Lücke im Bereich der C++-Vorlagenbücher. Zuvor gab es Bücher wie „Modern C++ Design“, die sich auf fortgeschrittene Template-Programmiertechniken und generische Muster konzentrierten, und „The C++ Standard Library“, das eine Anleitung zur Verwendung spezifischer Template-Frameworks und -Komponenten war. Wenn Ihnen jedoch ein tiefes Verständnis des Vorlagenmechanismus fehlt, wird es für Sie schwierig sein, frei „auf und ab“ zu gehen. Vor diesem Hintergrund empfehle ich dieses Buch jedem, der ein umfassendes Verständnis der C++-Template-Technologie anstrebt.


Dieses Buch hat eine Übersetzung in Festlandchina und eine in Taiwan, aber sie wurden von verschiedenen Übersetzern geschrieben. Wenn Sie diesen Artikel lesen, sollten beide Übersetzungen auf dem Markt sein, was den Lesern natürlich eine weitere Auswahl bietet. Die persönliche Website von Herrn Hou Jie hat die meisten Kapitel der traditionellen Übersetzung geöffnet, Sie können also genauso gut einen kurzen Blick darauf werfen.


Andrei Alexandrescu, Modernes C++-Design: Generische Programmierung und angewendete Entwurfsmuster


"Neues C++-Designdenken: Generisch Programmierung „Anwendung von Typprogrammierung und Entwurfsmustern“, Huazhong University of Science and Technology Press


„New C++ Design Thinking (Photocopied Edition)“, China Electric Power Press


Betrachten Sie sich als Meister der C++-Vorlagenprogrammierung? Bitte lesen Sie dieses Buch, bevor Sie mit J antworten. Dies ist ein beeindruckendes Meisterwerk, geschrieben von einem Genie. Der generische Modus erweitert Ihren Horizont unendlich und reicht aus, um die Denkgrenzen jedes C++-Programmierers herauszufordern.


Dieses Buch ist in zwei Teile gegliedert. Im ersten Teil werden die grundlegende Technologie der Loki-Bibliothek und einige erweiterte Sprachfunktionen besprochen, darunter strategiebasiertes Klassendesign und Vorlagen. Lokale Spezialisierung, Assertionen zur Kompilierungszeit, Typlisten- und Zuweisungstechniken für kleine Objekte usw. Der zweite Teil konzentriert sich auf die wichtigen Komponenten und die generische Mustertechnologie in Loki, einschließlich Generalisierungsfunktor, Singleton, Smart Pointer, Objektfabrik und abstrakte Fabrik, Besucher- und Multimethoden usw. Jede Technologie ist aufschlussreich und atemberaubend.


Wenn es um das Erlernen von C++ geht, ist es oft eine Ausrede, zu weit zu gehen, um nicht nach einem tieferen Verständnis zu streben. Objektorientiert ist jedoch nicht alles in C++, Vorlagen und generische Programmierung machen auch die Hälfte davon aus. Für „ernsthafte“ C++-Programmierer ist es eine kluge Entscheidung, diese nachweislich erfolgreiche Technologie zeitnah weiterzuentwickeln.


Fazit


Diese Werke sind so berühmt, dass ich vielleicht überhaupt keine Empfehlung brauche. Doch auch wenn das C++-Programmiererteam nicht so schnell wächst wie andere, trendigere Sprachen, kommen immer mehr neue Leute hinzu als alte Leute gehen. Neben der herzlichen Begrüßung von Neulingen denke ich persönlich, dass es an der Zeit ist, eine „Bestandsaufnahme“ der C++-Bücher vorzunehmen, und hoffe, dass eine solche „Bestandsaufnahme“ für interessierte Leser von Nutzen sein wird. Bitte seien Sie geduldig und gnädig. Im nächsten Artikel werde ich weiterhin gute C++-Bücher zu Standardbibliotheken, Netzwerkprogrammierung und anderen Aspekten vorstellen. Mit einem guten Buch an Ihrer Seite wird dieser Winter nicht kalt.


Die vier Bücher und fünf Klassiker der C++-Programmierung (Teil 2)


Ich habe TCPL im „inventarisiert“. vorheriger Artikel Es gibt mehr als ein Dutzend gute C++-Bücher zu D&E, Einführungs-Tutorials, effizienter und robuster Programmierung, Vorlagen und allgemeiner Programmierung. Der Winter geht zum Frühling über, lasst uns die wunderbare Reise der C++-Bücher fortsetzen. Als ich am Institut arbeitete, arbeitete ich mit zwei anderen Forschungsinstituten desselben Instituts zusammen, um ein groß angelegtes Integrationsprojekt für Wasserschutz-Hubs zu entwickeln. Unsere drei Softwaresysteme müssen alle miteinander kommunizieren. Beim Debuggen des Kommunikationsmoduls stellte ein aufmerksamer Kunde (ein fleißiger Systemadministrator) fest, dass mein Code nicht mehr als 30 Zeilen Interpretationscode für dasselbe Kommunikationsprotokoll enthielt, während der Code der anderen Partei mehr als 150 Zeilen umfasste und schwer zu verstehen war. Der Systemadministrator war sehr verwirrt, dass jeder seine Programmierstile und -gewohnheiten unterscheidet. Ich verwende die Standardbibliothek, während er den traditionellen C-Programmierstil und andere Technologien verwendet, die er gewohnt ist.


Versteh mich nicht falsch! Ich möchte diesen Partner keineswegs herabwürdigen. Tatsächlich bewundere ich oft Programmierer, die wirklich über tiefe C-Programmierkenntnisse verfügen. Schließlich ist der heutige Erfolg von C++ größtenteils auf seine tiefen Wurzeln in C zurückzuführen. Wenn er als C++-Programmierer nicht mit C in C++ vertraut ist, neige ich dazu, zu denken, dass seine Grundkenntnisse nicht solide und sein technisches Selbstvertrauen unzureichend sind.


Aber andererseits ist C++ eine Multiparadigmen-Programmiersprache, die je nach Situation auf jeden Fall wissen sollte. Als Projektleiter, der oft spontan vor Ort entwickeln muss, um dringende Aufgaben schnell und schnell lösen zu können, bin ich es gewohnt, soweit wie möglich auf vorhandene Bibliotheken (und Komponenten) zurückzugreifen. Die bewährte Effizienz (und Robustheit) der C++-Standardbibliothek ist bereits vorhanden, warum also nicht sie nutzen?


Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference


《C++ Standard Library: A Tutorial und Referenz Selbststudium Tutorial und Referenzhandbuch“, Huazhong University of Science and Technology Press


Dies ist ein C++-Standardbibliotheksbuch im Enzyklopädiestil, eine Referenz, die es braucht immer wieder konsultiert werden. Es ist in Vollständigkeit, Detailliertheit und Genauigkeit beispiellos. Dieses Buch beschreibt detailliert die Spezifikationen und die Verwendung jeder Standardbibliothekskomponente und deckt die gesamte Standardbibliothek einschließlich Streams und Lokalisierung ab, nicht nur STL. Wie aus dem Untertitel dieses Buches hervorgeht, soll es zunächst als Tutorial und später als Referenzhandbuch gelesen werden.


Der leicht verständliche Schreibstil macht dieses Buch sehr leicht zu lesen. Wenn Sie lernen möchten, wie Sie die Standardbibliothek nutzen und ihr Potenzial maximieren, müssen Sie dieses Buch haben. Wie im Internet gesagt, sollte dieses Buch nicht nur in Ihrem Bücherregal, sondern auch auf Ihrem Computertisch platziert werden. Ich kann es jedem professionellen C++-Programmierer wärmstens empfehlen.


Angelika Langer, Klaus Kreft, Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference


《 „Standard C++ Input and Output Streams and Localization“, People's Posts and Telecommunications Publishing House


Die C++-Standardbibliothek besteht aus drei Teilen: STL, Streams und Lokalisierung. Es gibt bereits Es gibt viele, aber seltene Monographien zum Thema Streaming und Lokalisierung. Dieses Buch behandelt Streaming und Lokalisierung bisher ausführlicher Ich bin damit zufrieden, auf dem Niveau zu bleiben, Liuku „nutzen zu können“, und lass es dir nicht entgehen.


Im Sommer 2001 habe ich die chinesische Version davon gelesen Buch. Ausgabe, alles, vom Inhalt bis zur Verpackung, hat einen tiefen Eindruck bei mir hinterlassen – aber größtenteils negativ. Im Herbst 2003 erfuhr ich, dass ein Online-Buchladen die chinesische Übersetzung zu einem sehr niedrigen Preis verkaufte Ich konnte nicht anders, als aufgeregt zu sein.


Scott Meyers, Effektive STL: 50 spezifische Möglichkeiten, Ihre Verwendung der Standardvorlagenbibliothek zu verbessern (Fotokopie-Version) ", China Electric Power Publishing House


Nachdem ich die chinesischen Übersetzungen von Scotts „Effective C++“ und „More Effective C++“ gelesen hatte, habe ich mich auf die chinesische Version gefreut Ich habe auf der persönlichen Homepage von Herrn Pan Aimin erfahren, dass er und seine Partner die Übersetzung dieses Buches anscheinend abgeschlossen haben, die Originalversion jedoch noch nicht erhältlich ist


Dieses Buch ist eine Pflichtlektüre für Programmierer, die STL verwenden. In diesem Buch erklärt uns Scott, wie STL-Container und -Algorithmen funktionieren und wie man sie am besten nutzt. Wie die anderen Werke von Scott ist auch dieses Buch in einem klaren, präzisen Stil geschrieben und äußerst gut lesbar. Ich denke, dass Sie nach der Lektüre dieses Buches die gleichen Gedanken haben wie ich und andere C++-Programmierer: Wann wird Scott eine „effektivere STL“ schreiben?


In Bezug auf STL möchte ich Sie auch daran erinnern, Matthew H. Austerns „Generic Programming and the STL: Using and Extending the C++ Standard Template Library“ („Generic Programming und die STL: Using and Extending the C++ Standard Template Library") STL", China Electric Power Press). Dieses Buch strahlt eine starke akademische Atmosphäre aus. Am Ende des Buches „Accelerated C++: Practical Programming by Beispiel“ empfehlen Andrew Koenig und Barbara Moo feierlich zwei weitere gute Bücher für Fortgeschrittene (zusätzlich zu ihren eigenen „Ruminations on C++“), eines davon ist TCPL und das andere ist dieses Buch!


Netzwerkprogrammierung


Welche Rolle sollte C++ im Zeitalter der Netzwerkprogrammierung spielen? Umgebung), um es Ihnen zu sagen.


Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Band 1: Komplexität mit ACE und Mustern meistern


Douglas C. Schmidt, Stephen D. Huston, C++-Netzwerkprogrammierung, Band 2: Systematische Wiederverwendung mit ACE und Frameworks


《C++-Netzwerkprogrammierung, Band 1: Anwendung ACE and Patterns Eliminate Complexity“, Huazhong University of Science and Technology Press


„C++ Network Programming, Band 2: Systematic Reuse based on ACE and Framework“, Electronic Industry Publishing Companies


Verwenden Sie C++ für die Netzwerkprogrammierung auf Unternehmensebene. Derzeit ist ACE (und diese beiden Bücher) eine erwägenswerte Wahl. ACE ist ein objektorientiertes, plattformübergreifendes Open-Source-Netzwerkprogrammierungsframework, das darauf abzielt, leistungsstarke Netzwerkanwendungen und Middleware zu erstellen. Douglas ist der Gründer von ACE und Stephen bietet ACE seit mehreren Jahren technische Unterstützung und Beratungsdienste an. Beide sind Mitglieder der ACE-Community (ja, der Einfluss und die praktische Anwendung von ACE haben eine Community gebildet).


ACE ist nicht nur bei Universitäten und Forschungsinstituten gefragt, es wird auch in Tausenden von kommerziellen Anwendungen auf der ganzen Welt erfolgreich eingesetzt. ACE spielte und spielt weiterhin eine wichtige Rolle in Netzwerksystemen in den Bereichen Telekommunikation, Luft- und Raumfahrt, Medizin und Finanzen. Wenn Sie bereit sind, ein Hochleistungskommunikationssystem zu entwickeln, sollten Sie diese Sammlung der weltweit führenden Experten in Betracht ziehen.


Neben der Verwendung von Hochsprachenfunktionen wie der objektorientierten C++-Designtechnologie und -Vorlagen verwendet ACE auch eine große Anzahl von Mustern. „C++ Network Programming“ Band 1 und Band 2 vermitteln Ihnen nicht nur alle Aspekte von ACE, sondern auch fortgeschrittene Techniken wie Muster und allgemeines Framework-Design. Daher können Sie als fortgeschrittener oder fortgeschrittener C++-Programmierer von der Lektüre dieser beiden Bücher profitieren, auch wenn Sie sich selten ernsthaft mit C++-Netzwerkprogrammierung beschäftigen.


Ja, nicht alle Netzwerkanwendungen müssen Webserver (und andere Anwendungsserver) und schwere Komponentenmodelle verwenden, um die Denkweise zu ändern Profitieren Sie von der ACE-Komponente.


Verschiedenes


Die folgenden Bücher sind in der Rubrik „Verschiedenes“ enthalten, einfach weil ich kein Think habe Bei angemessenerer Kategorisierung sind sie genauso lesenswert wie die oben genannten Bücher.


Bruce Eckel, Thinking in C++, Band 1: Einführung in Standard C++ (2. Auflage)


Bruce Eckel , Thinking in C++, Band 2: Praktische Programmierung (Zweite Auflage)


"C++ Programming Thinking (2. Auflage) Band 1: Standard C++ Guide", Machinery Industry Publisher


„C++ Programming Thoughts (English Edition 2nd Edition)“, Machinery Industry Press


“ Die erste Ausgabe von „Thinking in C++“ gewann 1996 den Book Shock Award der Zeitschrift Software Development. Die neu herausgegebene zweite Auflage hat den Inhalt erheblich umgeschrieben und angepasst, um die Auswirkungen der C++-Standardisierung und die neuesten Forschungs- und Praxisergebnisse im objektorientierten Bereich der letzten Jahre widerzuspiegeln. Fortgeschrittene Themen wie „Eingabeströme“, „Mehrfachvererbung“, „Ausnahmebehandlung“ und „Laufzeittyperkennung“ sind im zweiten Band untergebracht, zusammen mit einigen Inhalten, die nach der Standardisierung von C++ hinzugefügt wurden. Bruce ist ein erfahrener C++-Dozent und -Berater. Seine Schulungs- und Schreiberfahrung ist für Leser attraktiver als die, die von technischem Personal geschrieben wurden. Tatsächlich ist dieses Buch unter ähnlichen Büchern für die meisten Leser besser lesbar als TCPL und „C++ Primer“. Übrigens können Sie einen ersten Blick auf den zweiten Band werfen, indem Sie die Website des Autors besuchen.


Andrew Koenig, Barbara E. Moo, Ruminations on C++: A Decade of Programming Insight and Experience


《 Meditations on C++“, People's Posts and Telecommunications Press


Andrew ist einer der wenigen C++-Experten weltweit. Dies ist ein Buch über C++-Programmierideen und Programmiertechniken und nicht über Sprachdetails. Wenn Sie bereits über gewisse Grundlagen verfügen, lernen Sie in diesem Buch, wie Sie beim Programmieren in C++ denken und Lösungen ausdrücken können. Der technische Ausdruck des gesamten Buches ist gründlich und der Text ist leicht verständlich. Bjarne kommentierte dieses Buch: Dieses Buch steckt voller Erkenntnisse darüber, „was C++ ist und was C++ kann.“


Stanley B. Lippman, Inside The C++ Object Model


"Eingehende Untersuchung des C++-Objektmodells ", Huazhong Technology University Press


„Eingehende Untersuchung des C++-Objektmodells (Fotokopieversion)", China Electric Power Press


aus C++ aus der Perspektive des Compilers beobachten kann Ihnen helfen zu verstehen, was passiert und warum. In diesem Buch werden zahlreiche zugrunde liegende Betriebsmechanismen der objektorientierten C++-Programmierung erläutert, darunter Konstruktoren, Funktionen, temporäre Objekte, Vererbung, Virtualisierung, Instanziierung von Vorlagen, Ausnahmebehandlung, Identifizierung von Laufzeittypen usw. Außerdem werden einige Aspekte der Implementierung vorgestellt. Im C++-Objektmodellprozess vorgenommene Kompromisse. C++-Programmierer, die gerne tiefer in die Materie eintauchen, sollten sich dieses Buch nicht entgehen lassen.


Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elemente wiederverwendbarer objektorientierter Software


„Entwurfsmuster: Die Grundlage wiederverwendbarer objektorientierter Software“, Machinery Industry Press


„Entwurfsmuster: Die Grundlage wiederverwendbarer objektorientierter Software (englische Version)“ )“, Machinery Industry Press


Um wiederverwendbare objektorientierte Software zu entwerfen, müssen Sie Entwurfsmuster beherrschen. Dieses Buch ist nicht speziell für C++-Programmierer geschrieben, aber insbesondere C++-Programmierer werden von der Verwendung von C++ (und Smalltalk) als primärer Beispielsprache profitieren. Die vier Autoren sind allesamt international anerkannte Experten auf dem Gebiet der objektorientierten Software. Sie haben ihre Erfahrungen im objektorientierten Softwaredesign detailliert als Designmuster festgehalten. Der Einfluss dieses Buches war so tiefgreifend, dass die vier Autoren und das Buch den Spitznamen GoF (Gang of Four) erhielten. Dieses Buch hat eine starke akademische Atmosphäre und einen strengen und prägnanten Schreibstil. Obwohl es nicht so einfach zu lesen ist wie einige Bücher, die Muster erklären, ist dieses Buch die ultimative Autorität, wenn Sie Designmuster wirklich genau verstehen möchten. Um Designmuster zu lernen, muss dieses Buch immer wieder durchgekaut werden. Übrigens: Bitte machen Sie Designmuster zum Schlüssel für aufgeschlossenes Denken und legen Sie sich niemals in die Fesseln des geschlossenen Denkens.


Es gibt auch einige gute C++-Bücher, die es wert sind, gelesen zu werden, aber ich kann sie hier nicht alle auflisten. Zum Beispiel das Buch „Large-Scale C++ Software Design“ von John Lakos („Large-Scale C++ Programming“, China Electric Power Press) und „STL Source Code Analysis“ von Herrn Hou Jie (Huazhong University of Science and Technology Press) usw .


„STL Source Code Analysis“ ist ein sehr besonderes Buch, aber ich denke, es kann besser sein. Ich persönlich hoffe, dass Herr Hou Jie eine ausführlichere, gründlichere und umfassendere „Zweite Ausgabe“ schreiben wird, nachdem er seit der Veröffentlichung der ersten Ausgabe die Vorlagentechnologie angesammelt und neu überdacht hat. Leider scheint Herr Hou Jie beschlossen zu haben, sich nach Abschluss der Übersetzung des Buches „C++ Templates: The Complete Guide“ vorübergehend von den Bereichen Templates, generische Programmierung und STL zu verabschieden.


Hinzugefügt am 31. März 2004: Die beiden Nachschlagewerke, die ich am häufigsten konsultiere, sind „C++ Standard Program Library“ und „STL Source Code Analysis“. Das hat natürlich viel mit meinem Schreibplan für das Jahr zu tun.


Die erfolgreiche Entwicklung großer Softwaresysteme mit C++ erfordert nicht nur ein gutes Verständnis der in den meisten C++-Büchern beschriebenen logischen Designprobleme, sondern auch die Beherrschung von „Large-Scale“. C++-Programmierung“ Die in „beschriebenen physikalischen Entwurfstechniken. Natürlich ist dieses Buch etwas veraltet, aber wenn Sie genug Energie und Geld übrig haben, kann der Kauf eines Exemplars nicht schaden.


An dieser Stelle halte ich es für notwendig festzustellen, dass es einige (gute) Bücher gibt, die nicht empfohlen werden, und die Hauptgründe sind folgende:


Die oben genannten Bücher sind genug und gut genug.


Ich werde keine Bücher empfehlen, die über normale Kanäle schwer zu kaufen sind – egal ob auf Chinesisch oder Englisch.


Der Ruhm des Autors (Übersetzers) hat keinen Einfluss auf meine Empfehlung. Wir lesen Bücher, keine Menschen.


Ich werde kein Buch empfehlen, das ich noch nie gelesen habe. Ich muss mindestens eine Version davon gesehen haben (einschließlich der elektronischen Version). Dieses „Lesen“ bezieht sich im Allgemeinen auf „sorgfältiges Lesen“, einige können jedoch nur als „Browsen“ angesehen werden.


Fazit


Als gewöhnlicher technischer Redakteur und Übersetzer bin ich mir der Schwierigkeiten der technischen Erstellung und Umsetzung bewusst Übersetzung (und Glück) und erfahren Sie mehr oder weniger über die Details hinter der Erstellung, Übersetzung, Produktion, Veröffentlichung und Vermarktung technischer Bücher. Heute werde ich nichts über ein Buch sagen, das unbefriedigend zu sein scheint. Der Zweck der Auflistung verschiedener Versionen desselben Buches besteht lediglich darin, Ihnen mehr Informationen zu bieten und Ihnen eine weitere Auswahl zu bieten.


In den späteren Phasen des Schreibens dieses Artikels schrieb ich einen Brief an Bjarne und fragte ihn, was er schreiben würde, wenn er diesen Artikel schreiben würde. Er hat mich prägnant beraten. Bjarne bestätigte zwar, dass die meisten der oben aufgeführten Bücher die weltweit besten C++-Bücher sind, erinnerte mich jedoch daran, erfahrenen Programmierern „The C++ Standard: Incorporating Technical Corrigendum No. 1“ zu empfehlen. Dieses Buch ist die „Buchversion“ der C++-Standardspezifikation, und Bjarne hat das Vorwort persönlich geschrieben.


Bjarne hat mich auch freundlich daran erinnert, dass es auf meiner Empfehlungsliste kein Buch gibt, das C++-Programmierern bei der Windows-Programmierung hilft – was genau meine Absicht ist. In diesem Artikel empfehle und bewerte ich nur plattformneutrale C++-Werke (außer Netzwerkprogrammierung) – sie haben nichts mit dem Betriebssystem, nichts mit der integrierten Entwicklungsumgebung zu tun und ich stelle mir sogar vor, dass sie damit nichts zu tun haben der Compiler. Sie können wählen, ob Sie C++-Bücher lesen möchten, die sich auf Ihr Lieblingsgebiet beziehen, entsprechend Ihren Anforderungen an die Geschäftsentwicklung.


Wenn ich von „systemunabhängig und plattformneutral“ spreche, muss ich unbedingt an das Konzept der „Abstraktionsschicht“ denken. C++-Programmierer, die praktische Anwendungen entwickeln, arbeiten normalerweise in bestimmten Betriebssystemen, bestimmten Entwicklungsumgebungen und bestimmten Geschäftsfeldern. Ein solides und fundiertes Verständnis von Standard-C++ und der C++-Standardbibliothek wird Ihnen zweifellos die Arbeit in verschiedenen Betriebssystemen und verschiedenen Entwicklungsumgebungen ermöglichen „abstrakte“ Kosten, die zwischen verschiedenen Geschäftsbereichen fliegen.

Das Obige ist der Inhalt der „Vier Bücher und Fünf Klassiker der C++-Programmierung“. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn