Philosophie des Programmierers. Zusammenfassung: Philosophische Aspekte der Programmierung

Lohnt es sich, Programmieren zu lernen?

„Programmieren“ ist ein sehr weit gefasster Begriff. Einige Programmiersprachen sind viel einfacher als andere. Einige Sprachen erfordern ein Verständnis dafür, wie das Programm mit dem Computer „kommuniziert“. Der wichtigste Teil des Erlernens von Codes ist die Pflege der richtige Schritt Denken. Es geht nicht darum, sich selbst zu sagen „Ich schaffe das“ oder die nötige Literatur zu lesen …

Der Punkt ist dieser...

Programmieren lernen oder nicht lernen?

Die Beherrschung jeder Computersprache, von einfachem HTML bis hin zu komplexem C++, erfordert Engagement nicht nur für die Technologie, sondern auch für ihre endlosen Veränderungen. HTML5 endet aus gutem Grund mit einer Zahl. Sobald genügend Webbrowser anfangen, HTML6 zu unterstützen, müssen Entwickler wieder etwas Neues lernen.

Mögliche Gründe, warum Sie sich auf einen neuen Lernprozess einlassen möchten:

  • Gewinnen Sie Selbstvertrauen: Ich hatte mehrere Kunden, die das Gefühl hatten, Computer würden sie weniger einschüchtern, wenn sie eine Programmiersprache erlernten.
  • Notwendigkeit: Technische Probleme können jederzeit auftreten.
  • Nervenkitzel: Manche Menschen wollen einfach nur neue Fähigkeiten erlernen.
  • Um zu verstehen, was möglich ist: Wenn ein Entwickler sagt: „Das geht nicht!“ Meint er, dass es wirklich nicht möglich ist, oder will er diese Kopfschmerzen einfach nicht ertragen?

Seien Sie immer neugierig

Niemand möchte ein Käfer auf seiner Windschutzscheibe sein. Für mich ist es nicht die Angst vor dem Scheitern, die den Menschen Angst macht, sondern die Angst vor der Möglichkeit, verloren zu gehen. Überwältigende Hoffnungslosigkeit fördert Minderwertigkeitsgefühle. Mut und Ausdauer sind kein Gegenmittel gegen das Gefühl der Überforderung, aber frühzeitig damit aufzuhören, bevor das Gefühl überhandnimmt, ist die beste Medizin.

Ich habe drei Ansätze zur Lösung eines Problems bei jedem Projekt:

  • Finden Sie ein Thema, das Sie nervt

Konditionen und Bezahlung sind alle gut. Aber nichts löst einen stärkeren Ansturm aus als ein Juckreiz, den Sie nicht erreichen können. In einer vielversprechenden Zukunft sollte Programmieren kein Selbstzweck sein. Es sollte als Ihr „Schmiermittel gegen quietschende Türen“ dienen.

  • Für zusätzliche Anstrengungen sollte man belohnt werden.

Nachdem sie den sprichwörtlichen Juckreiz entdeckt haben, sollten auch Menschen, die das Programmieren lernen, Erleichterung erfahren. Keine Tutorials, keine Tools, kein Lob helfen jedem, ein CODE-Meister zu werden. Erst nach den Worten „Ich habe das geschrieben und... schau, was ich getan habe!“ Sie werden das Gefühl haben, ein Hindernis überwunden zu haben. Es wird dumm klingen, bis Sie es selbst versuchen. Getesteter Code, der funktioniert, wird Ihnen einen Adrenalinschub bescheren und Ihnen das Gefühl geben, ein Meister der Computerprogrammierung zu sein.

  • Ihr Projekt sollte erledigt werden, während Ihr Gehirn Appetit hat

Trainiere dein Gehirn. Beim Anstrengen ermutigen Trainer die Menschen, sich etwas mehr als ihre Grenzen anzustrengen. Lernen ist Hunger. Ihr Gehirn hat immer Appetit auf neues Wissen.

Übe täglich

Die einzige Möglichkeit, Programmieren zu lernen und sich für immer daran zu erinnern, besteht darin, jeden Tag zu üben. Wie beim Erlernen jeder neuen Fähigkeit werden Ihre Fähigkeiten durch einen konsistenten Zeitplan mit neuen Zielen nach und nach bis zur Perfektion verfeinert.

Immanuel Kant, der Schwindler der Philosophie, hat sich etwas Großes für den Angostizismus ausgedacht. Das sogenannte „Ding an sich“. Eine äußerst interessante Sache.
Der Trick besteht darin: Im üblichen erkenntnistheoretischen Prozess gibt es eine Objekt-Subjekt-Verbindung. Diese. Es gibt immer ein Objekt, das das Subjekt kennt.
Es gibt viele Ansichten, die wir kennen (Idealismus, Materialismus und ihre nachfolgenden Strömungen), aber Kant allein hat sie alle übertroffen.
Nach seinem Verständnis kann man etwas nur wissen, wenn es einem die Möglichkeit gibt, es zu tun. Wenn zum Beispiel ein Ding geschlossen bleiben möchte, werden Sie nie wissen, dass es aus Holz ist, selbst wenn Sie es gesehen haben.
Diese. er verleiht dem Objekt Willen und setzt es dem Subjekt gleich. Solange Sie also das Ding kennen, wird das Ding Sie kennen. Mehrstufige Beziehungen wurden zu einstufigen Beziehungen migriert.

Es scheint verrückt, aber eine Bestätigung dieser Hypothese kann überall gefunden werden. Zum Beispiel Malewitschs schwarzes Quadrat. Viele halten es nur für ein schwarzes Quadrat, aber für andere hat es eine tiefe Bedeutung.
Es ist gut möglich, dass sich der Platz für Sie einfach nicht geöffnet hat, sondern jemand anderes darin Einsicht gefunden hat. Und solche Fälle gibt es viele. Schließlich gehen oft viele Menschen an etwas vorbei, und dann macht einer plötzlich eine Entdeckung/Erfindung im wahrsten Sinne des Wortes einfache Dinge, die um uns herum lagen, wir aber „nicht bemerkt“ haben. Vielleicht liegt es nicht daran, dass wir sie nicht bemerkt hätten, sondern daran, dass uns die Dinge nicht offenbart wurden? Diese äußerst kontroverse und interessante Position hat eine sehr reale Chance, in der Realität zu existieren.

Wenn das Universum beispielsweise ein riesiges Programm wäre, würde der Ersteller dann verschiedene Klassen erstellen wollen, um verschiedene Objekte zu beschreiben? Natürlich nicht, denn jeder strebt nach einem Minimum an Energie, jeder ist so faul wie er kann. Um sich nicht zu sehr darum zu kümmern, erstellt der universelle Programmierer daher nur eine Klasse für alle Objekte. Und es muss nur eine Art von Objekt-Objekt-Interaktion verarbeiten. Und es ist durchaus möglich, dass ein Objekt gerade deshalb ein anderes Objekt erst dann versteht, wenn es sich dazu entschließt, sich ihm zu öffnen.

Die zweite interessante Beobachtung betrifft die Weltanschauung und die Werte.
Werte dieser Welt, prägen unsere Weltanschauung, die wiederum unsere Werte prägt.
Dieser Teufelskreis spiegelt sich leicht in der Programmierung wider:

Funktion Worldview(Values) Values ​​​​= Algorithmus zur Berechnung von Werten() Rückgabewerte Ende der Funktion Hauptprogrammschleife (endlos wiederholen)( Values ​​​​= Worldview(Values) ) Ende des Programms

Es gibt viele ähnliche interessante Zusammenhänge zwischen Philosophie und Programmierung.

Wie Sie wissen, ist ein Computer in der Lage, Wörter (Text) und Objekte (3D-Modelle, Bilder) aufzuzeichnen. Die einzige Lücke, die der Schaffung von KI im Wege steht, ist das Konzept. Diese. das, was Wort und Gegenstand verbindet. Wenn jemand herausfindet, wie man ein Konzeptsystem in eine Maschine einfügt, entsteht KI.

Dmitri Jakuschew

"Philosophie"

Programmierung in der Sprache C++

Zweite Auflage, erweitert und korrigiert

UDC 004.43 BBK 32.973.202

Yakushev D. M.

I49 „Philosophie“ der Programmierung in C++. / D. M. Yakushev. - 2. Aufl. - M.: Buk Press, 2006. - 320 S.

ISBN 5 9643 0028 6

Der Autor der C++-Sprache ist Bjarne Stroustrup, ein Mitarbeiter des berühmten Unternehmens AT&T. C++ (oder besser gesagt sein Vorgänger C mit Klassen) entstand unter dem Einfluss der Simula-Sprache (man muss sagen, dass diese Programmiersprache bereits 1967 erschien). Tatsächlich hatte C zu dem Zeitpunkt, als C++ erschien, bereits an Popularität gewonnen; Professionelle Programmierer schätzen es für seine Fähigkeit, die Vorteile einer bestimmten Architektur zu nutzen und gleichzeitig Programme in einer relativen Sprache zu schreiben hohes Level.

Derzeit ist C++ eine der beliebtesten (wenn nicht die beliebteste) Programmiersprache. Es ist C++, das es Ihnen ermöglicht, ein Programm mit objektorientierten Ansätzen zu schreiben (und die Programme, die dies erfordern, sind normalerweise sehr groß) und gleichzeitig ziemlich „schnell“ zu sein.

Dieses Buch führt den Leser in die „Philosophie“ und Grundlagen der Programmierung in C++ ein. Das Buch enthält viele Beispiele, die vom Autor zusammengestellt und getestet wurden.

UDC 004.43 BBK 32.973.202

Teil 1.

Kapitel 1. C++ ist eine Allzweck-Programmiersprache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

Kapitel 2. Wortschatz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Kapitel 3. Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Kapitel 4. Geltungsbereich. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Kapitel 5. Definitionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Kapitel 6. Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Kapitel 7. Speicherklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Kapitel 8. Grundtypen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Kapitel 9. Abgeleitete Typen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 ​​​​Kapitel 10. Objekte und LVALUE (Adressen). . . . . . . . . . . . . . . . . . . . . . . . .15 Kapitel 11. Symbole und ganze Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Kapitel 12. Transformationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Kapitel 13. Ausdrücke und Operationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Kapitel 14. Beschreibungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Kapitel 15. Speicherklassenspezifizierer. . . . . . . . . . . . . . . . . . . . . .31 Kapitel 16. Deskriptoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Kapitel 17. Klassenbeschreibungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Kapitel 18. Initialisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Kapitel 19. Überladene Funktionsnamen. . . . . . . . . . . . . . . . . . . . .58 Kapitel 20. Beschreibung der Aufzählung. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Kapitel 21. Beschreibung von Asm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 Kapitel 22. Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Kapitel 23. Externe Definitionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

Kapitel 24. Befehlszeilen Compiler. . . . . . . . . . . . . . . . . . . . .68 Kapitel 25. Typenübersicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Kapitel 26. Überlegungen zur Mobilität. . . . . . . . . . . . . . . . . . . . . . . . . .75 Kapitel 27. Freier Speicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76

Teil 2. Turbo C++

Kapitel 1. Integrierte Entwicklungsumgebung. . . . . . . . . . . . . . . . . . . .78 Kapitel 2. Menüleiste und Menüs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Kapitel 3. TURBO C++-Fenster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Kapitel 4. Arbeiten mit dem Bildschirmmenü. . . . . . . . . . . . . . . . . . . . . . . . . . . . .80

Kapitel 5. Dateistruktur, Datentypen und Ein-/Ausgabeoperatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

Kapitel 6. Arithmetische, logische, relationale und Zuweisungsoperationen. . . . . . . . . . . . . . . . . . . . . . .91

Kapitel 7. Logische Organisation des Programms und einfachste Verwendung von Funktionen. . . . . . . . . . . . . . . . . . . . . . . . . .95

Kapitel 8. Logische Organisation eines einfachen Programms. . . . . . . . . . .95 Kapitel 9. Verwenden von Konstanten verschiedene Arten. . . . . . . . . . . . .96 Kapitel 10. Kontrollstrukturen. . . . . . . . . . . . . . . . . . . . . . . . . . . .98

Kapitel 11. Techniken zum Deklarieren und Zugreifen auf Arrays, Verwenden von Funktionen und der Define-Direktive

beim Arbeiten mit Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100

Teil 3. Von der Theorie zur Praxis

Kapitel 1. Die „von rechts nach links“-Regel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Kapitel 2. STLport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 Kapitel 3. Programmiersprache von Microsoft: C#. . . . . . . . . . . . . .106 Kapitel 4. C++ Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 Kapitel 5. Verwendung „intelligenter“ Zeiger. . . . . . . . . . . . . . . . . . . . . .111 Kapitel 6. Diskussionen zum Thema „intelligente“ Zeiger. . . . . . . . . . . . . .116 Kapitel 7. Virtuelle Destruktoren. . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Kapitel 8. Datenstrukturen in Binärdateien schreiben. . . . . . . . . . . .126

Kapitel 9. Der bedingungslose Sprungoperator „goto“. . . . . . . . . . . . . . . . . .132 Kapitel 10. Virtueller Konstruktor. . . . . . . . . . . . . . . . . . . . . . . . . . .136 Kapitel 11. Lesen von Quelltexten. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Kapitel 12. Die Funktion gets(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Kapitel 13. Eigenschaften. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Kapitel 14. Kommentare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Kapitel 15. Webprogrammierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Kapitel 16. Fehler bei der Arbeit mit dem Speicher. . . . . . . . . . . . . . . . . . . . . . . . . .158 Kapitel 17: Diagramme mit Ploticus erstellen. . . . . . . . . . . . . . .161 Kapitel 18. Automatisierung und Motorisierung der Anwendung. . . . . . . . . . .164 Kapitel 19. Übersicht über die C/C++-Compiler EMX und Watcom. . . . . . . . . .183 Kapitel 20. Verwendung der #import-Direktive. . . . . . . . . . . . . . . . . . .188

Kapitel 21: Systemfallen erstellen

Windows auf Borland C++ Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Fragen und Antworten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214

BELIEBTE WISSENSCHAFTLICHE VERÖFFENTLICHUNG

Jakuschew Dmitri Michailowitsch

„PHILOSOPHIE“ DER PROGRAMMIERUNG IN DER SPRACHE C++

Chefredakteur B.K. Leontyev

Chefredakteur A. G. Benetashvili

Originallayout von I. V. Tsarik

Künstler O. K. Alekhin

Kunstredakteur M. L. Mishin Technischer Redakteur K. V. Shapiro

Korrektoren L. S. Zimina, K. V. Tolkacheva

Unterzeichnet zur Veröffentlichung am 05.07.2006. Format 60x90/16. Newton-Schrift. Offsetpapier. Offsetdruck. Pech. l. 20. Auflage 3000.

Einführung in die Programmiersprache C++

Teil 1. Einführung in die Sprache

C++-Programmierung

C++ – Allzweck-Programmiersprache

Der Autor der C++-Sprache ist Bjarne Stroustrup, ein Mitarbeiter des berühmten Unternehmens AT&T. C++ (oder besser gesagt sein Vorgänger C mit Klassen) entstand unter dem Einfluss von Simula (man muss sagen, dass diese Programmiersprache bereits 1967 erschien). Tatsächlich hatte C zu diesem Zeitpunkt (als C++ erschien) bereits an Popularität gewonnen; Es genießt im Allgemeinen hohes Ansehen für seine Fähigkeit, die Fähigkeiten einer bestimmten Architektur zu nutzen und gleichzeitig eine relativ höhere Sprache zu verwenden. Normalerweise mögen sie ihn genau aus diesem Grund nicht. Natürlich gingen in diesem Fall einige Bestimmungen zur Programmerstellung verloren (oder wurden verfälscht); Beispielsweise gibt es in C praktisch keine Möglichkeit, modulare Programme zu erstellen. Nein, natürlich werden sie erstellt, aber mit Hilfe einiger „Krücken“ in Form der Verwendung von Präprozessordirektiven gibt es keine solche Modularität wie beispielsweise in Modula 2 oder Ada in C. In C++ ist dies übrigens immer noch nicht der Fall.

Von Anfang an wurde betont, dass C++ eine Weiterentwicklung der C-Sprache, möglicherweise eines Teils ihres Dialekts, ist. Dies wird durch die Tatsache belegt, dass der erste (noch existierende) Compiler cfront war, der C++-Quellcode in C-Quellcode übersetzte. Diese Meinung besteht immer noch und, das muss man sagen, sie ist immer noch nicht unbegründet; jedoch C und C++ - verschiedene Sprachen Programmierung.

Der Hauptunterschied zwischen C++ bei seinem ersten Erscheinen war die explizite Unterstützung eines objektorientierten Programmieransatzes. Sie müssen verstehen, dass Sie mit OOP und OOA überall programmieren können, auch wenn das Toolkit dies nicht explizit unterstützt; Als Beispiel können Sie die Benutzeroberflächenbibliothek nehmen

Einführung in die Programmiersprache C++

GTK+-Gesicht, das in „reinem“ C geschrieben ist und die Prinzipien des objektorientierten „Designs“ verwendet. Die Einführung von Tools zur Unterstützung von OOP in einer Programmiersprache bedeutet, dass in der Kompilierungsphase (und nicht in der Programmausführungsphase) die Kompatibilität von Typen, das Vorhandensein von Methoden usw. überprüft wird. Im Prinzip ist das recht praktisch.

Auch hier gilt: So wie C keine reine Programmiersprache auf hoher Ebene ist (weil sie zu viele Tricks zulässt), ist C++ streng genommen keine objektorientierte Programmiersprache. Dies wird durch Merkmale wie das Vorhandensein virtueller Funktionen behindert (denn wenn es um Polymorphismus geht, legt niemand jemals fest, dass einige Methoden daran teilnehmen und andere nicht), das Vorhandensein der Funktion main() usw. . Darüber hinaus gibt es in C++ keine Entitäten wie beispielsweise Metaklassen (obwohl sie wahrscheinlich nicht so dringend benötigt werden) und Schnittstellen (stattdessen wird Mehrfachvererbung verwendet). Allerdings ist C++ derzeit eine der beliebtesten (wenn nicht sogar die beliebteste) Programmiersprache. Warum? Ja, denn all diese „Monstrositäten“ machen es letztlich möglich, ein Programm mit objektorientierten Ansätzen (und die Programme, die das erfordern, sind meist sehr groß) und gleichzeitig recht „schnell“ zu schreiben. Dies wird gerade durch das Vorhandensein virtueller Funktionen erleichtert (d. h. das, was der Programmierer selbst während des Entwurfs aufteilt, wo er Polymorphismus benötigt und wo es ausreicht, einige Funktionen nach einem bestimmten Merkmal zu einer Gruppe zusammenzufassen), deren zwingende Anwesenheit ein Optimierer und so weiter. All dies ermöglicht es Ihnen, bei richtiger Anwendung, trotzdem ein funktionierendes Programm zu schreiben. Zwar gibt es häufig Beispiele für die Verwendung durch Analphabeten, wodurch die Wahl von C++ für die Projektumsetzung zur Qual für Programmierer und Management wird.

Derzeit gibt es einen Standard für die Programmiersprache C++, der unter anderem eine Standard-Template-Bibliothek umfasst. Vorlagen sind ein besonderes Thema; formal sind sie auch „Krücken“, um in der Kompilierungsphase sozusagen Polymorphismus zu erzeugen (und in dieser Funktion sind sie sehr nützlich), aber die Bibliothek

Zweifellos ist die Innovation von allen Seiten richtig. Endlich haben wir es dem Programmierer viel leichter gemacht, eine Liste portabel (also von Compiler zu Compiler) zu sortieren (zusätzlich zum Schreiben aller entsprechenden Unterroutinen und Datenstrukturen selbst). Es stimmt, dass viele Leute immer noch ein schlechtes Verständnis dafür haben, wie die STL funktioniert und wie sie verwendet wird (mit Ausnahme von std::cin und std::cout ).

Einführung in die Programmiersprache C++

Ein wichtiger Meilenstein in der Entwicklung der Programmierung war die Schaffung und weite Verbreitung der Sprache C++. Diese Sprache, die die Werkzeuge der C-Sprache (prozedural orientierte Sprache) beibehält, die zu einem allgemein anerkannten Standard für das Schreiben von System- und Anwendungsprogrammen geworden ist, wurde eingeführt

Möglichkeiten der Programmierpraxis für einen neuen technologischen Entwicklungsansatz Software, genannt „objektorientierte Programmierung“.

Die C++-Programmiersprache ist C*, erweitert durch die Einführung von Klassen, Inline-Funktionen, überladenen Operatoren, überladenen Funktionsnamen, Konstantentypen, Referenzen, Verwaltungsoperationen für freien Speicher und Überprüfung von Funktionsparametern.

Die Einführung eines objektorientierten Paradigmas in die Praxis des Programmschreibens führt zur Entwicklung neuer Bereiche der Informatik, einer deutlichen Steigerung der Herstellbarkeit der erstellten Software, einer Reduzierung der Kosten für die Entwicklung und Wartung von Programmen usw Wiederverwendung, Beteiligung am Prozess der Erweiterung der intellektuellen Fähigkeiten von Computern.

Der Objektansatz zur Informationsmodellierung von Fachgebieten wird zunehmend als Grundlage für die Strukturierung ihrer Informationsreflexionen und insbesondere Wissensbasen genutzt.

C++ ist eine Allzweck-Programmiersprache. Diese besondere Sprache ist für ihre Effizienz, Wirtschaftlichkeit und Portabilität bekannt.

Diese Vorteile von C++ gewährleisten eine gute Entwicklungsqualität nahezu aller Arten von Softwareprodukten.

Durch die Verwendung von C++ als Instrumentalsprache erhalten Sie schnelle und kompakte Programme. In vielen Fällen sind in C++ geschriebene Programme in ihrer Geschwindigkeit vergleichbar mit in Assembler geschriebenen Programmen.

Lassen Sie uns einige wesentliche Funktionen der C++-Sprache auflisten:

C++ bietet einen vollständigen Satz strukturierter Programmieroperatoren.

C++ bietet eine ungewöhnlich große Menge an Operationen;

Einführung in die Programmiersprache C++

Die Vielfalt der Operationen ermöglicht es Ihnen, verschiedene Sätze davon auszuwählen, um den resultierenden Code zu minimieren.

C++ unterstützt Zeiger auf Variablen und Funktionen;

Ein Zeiger auf ein Programmobjekt entspricht der Maschinenadresse dieses Objekts;

Durch den sinnvollen Einsatz von Zeigern können Sie Programme erstellen, die effizient laufen, weil... Mit Zeigern können Sie auf die gleiche Weise auf Objekte verweisen wie ein Computer.

C++ unterstützt Zeigerarithmetik und ermöglicht so den direkten Zugriff und die Manipulation von Speicheradressen.

Kapitel 2. Wortschatz

Es gibt sechs Klassen von Token: Bezeichner, Schlüsselwörter, Konstanten, Zeichenfolgen, Operatoren und andere Trennzeichen. Leerzeichen, Tabulatorzeichen, Zeilenumbrüche und Kommentare (gemeinsam „Leerzeichen“), wie unten beschrieben, werden ignoriert, es sei denn, sie dienen als Token-Trennzeichen.

Etwas Leerraum ist erforderlich, um Bezeichner, Schlüsselwörter und Konstanten zu trennen, die sich sonst berühren würden. Wenn der Eingabestream bis zu einem bestimmten Zeichen tokenisiert wird, wird davon ausgegangen, dass das nächste Token die längste Zeichenfolge enthält, die das Token bilden kann.

Kommentare

Die /*-Symbole kennzeichnen den Anfang eines Kommentars, der mit den */-Symbolen endet. Kommentare können nicht verschachtelt werden.

Die //-Zeichen beginnen einen Kommentar, der am Ende der Zeile endet, in der sie erscheinen.

Identifikatoren (Namen)

Viele C++-Operationen entsprechen Maschinenanweisungen und können daher direkt in Maschinencode übersetzt werden;

Bezeichner – eine Folge von Buchstaben und Zahlen beliebiger Länge; das erste Zeichen muss ein Buchstabe sein; Der Unterstrich „_“ gilt als der Buchstabe wu; Groß- und Kleinbuchstaben sind unterschiedlich.

Die signierten und flüchtigen Bezeichner sind für die zukünftige Verwendung reserviert.

Konstanten

Es gibt verschiedene Arten von Konstanten. Nachfolgend finden Sie eine kurze Zusammenfassung der Hardware-Eigenschaften, die sich auf ihre Größe auswirken.

Ganzzahlige Konstanten

Eine ganzzahlige Konstante, die aus einer Folge von Ziffern besteht, wird als oktal betrachtet, wenn sie mit 0 (Ziffer Null) beginnt, andernfalls als dezimal. Die Zahlen 8 und 9 sind keine Oktalziffern.

Eine Ziffernfolge mit vorangestelltem 0x oder 0X wird als hexadezimale Ganzzahl akzeptiert.

Zu den Hexadezimalziffern gehören die Buchstaben a oder A bis f oder F mit Werten zwischen 10 und 15.

Eine Dezimalkonstante, deren Wert größer als die größte vorzeichenbehaftete Maschinen-Ganzzahl ist, wird als lang betrachtet; Oktal- und Hexadezimalkonstante, deren Wert den größten übersteigt

Einführung in die Programmiersprache C++

Halsmaschine Ganzzahl mit Vorzeichen, gilt als lang; In anderen Fällen werden Ganzzahlkonstanten als Ganzzahlen behandelt.

Explizite lange Konstanten

Eine dezimale, oktale oder hexadezimale Konstante, unmittelbar gefolgt von l (lateinischer Buchstabe „el“) oder L, wird als lange Konstante betrachtet.

Zeichenkonstanten

Eine Zeichenkonstante besteht aus einem Zeichen, das von einfachen Anführungszeichen (Apostrophen) umgeben ist, z. B. „x“. Der Wert einer Zeichenkonstante ist der numerische Wert des Zeichens im Zeichensatz (Alphabet) der Maschine.

Zeichenkonstanten gelten als Daten vom Typ int . Einige nichtgrafische Zeichen, einfache Anführungszeichen und Backslash\, können gemäß der folgenden Liste von Escape-Sequenzen dargestellt werden:

Zeilenumbruchzeichen NL(LF)

horizontale Registerkarte NT

vertikale Lasche VT

Kehren Sie zu Schritt BS zurück

Wagenrücklauf CR

Übersetzung des FF-Formats

Backslash\

einfaches Anführungszeichen (Apostroph) „

Bit gesetzt 0ddd

Bit gesetzt 0xddd

Die Escape-Sequenz \ddd besteht aus einem Backslash gefolgt von 1, 2 oder 3 Oktalziffern, die den Wert des gewünschten Zeichens angeben. Ein Sonderfall dieses Konstrukts ist \0 (ohne darauffolgende Ziffern), der das leere Zeichen NULL angibt.

Die Escape-Sequenz\xddd besteht aus einem Backslash, gefolgt von 1, 2 oder 3 Hexadezimalziffern, die den Wert des gewünschten Zeichens angeben. Wenn das auf den Backslash folgende Zeichen nicht zu den aufgeführten gehört, wird der Backslash ignoriert.

Einführung in die Programmiersprache C++

Gleitkommakonstanten

Eine Gleitkommakonstante besteht aus einem ganzzahligen Teil, einem Dezimalpunkt, einer Mantisse, e oder E, und einem ganzzahligen Exponenten (möglicherweise, aber nicht unbedingt mit Vorzeichen). Der ganzzahlige Teil und die Mantisse bestehen beide aus einer Ziffernfolge. Der ganze Teil oder die Mantisse (aber nicht beide) können weggelassen werden; oder der Dezimalpunkt oder (E) zusammen mit dem gesamten Exponenten (jedoch nicht beide Teile gleichzeitig) können weggelassen werden. Die Gleitkommakonstante ist vom Typ double.

Enum-Konstanten

Als Enumeratoren beschriebene Namen sind Konstanten

na int.

Beschriebene Konstanten

Ein Objekt eines beliebigen Typs kann so definiert werden, dass es im gesamten Namensbereich einen konstanten Wert hat. Bei Zeigern wird dazu der Deklarator *const verwendet; Für Nicht-Zeigerobjekte wird der const-Deskriptor verwendet.

Eine Zeichenfolge ist eine in doppelte Anführungszeichen eingeschlossene Zeichenfolge: „…“. Die Zeichenfolge hat einen Zeichen-Array-Typ und die Speicherklasse static und wird mit den angegebenen Zeichen initialisiert.

Der Compiler fügt am Ende jeder Zeile ein Nullbyte \0 ein, damit ein Programm, das die Zeile durchsucht, das Ende finden kann.

In einer Zeile muss dem doppelten Anführungszeichen „ ein \ vorangestellt werden; außerdem können die gleichen Escape-Sequenzen verwendet werden, die für Zeichenkonstanten beschrieben wurden.

Und schließlich kann das Newline-Zeichen nur unmittelbar nach dem \; erscheinen. dann werden sowohl -\ als auch das Newline-Zeichen ignoriert.

Kapitel 3. Syntax

Aufnahmesyntax

Gemäß den syntaktischen Regeln der Aufzeichnung werden syntaktische Kategorien kursiv und wörtliche Wörter und Symbole in einer Schriftart mit konstanter Breite hervorgehoben.

Einführung in die Programmiersprache C++

Alternative Kategorien werden in verschiedene Zeilen geschrieben. Ein optionales Terminal- oder Nicht-Terminalsymbol wird durch den Index „opt“ angezeigt, sodass (opt) angibt, dass der Ausdruck in den geschweiften Klammern optional ist.

Namen und Typen

Ein Name bezeichnet (bezeichnet) ein Objekt, eine Funktion, einen Typ, einen Wert oder eine Bezeichnung. Der Name wird per Beschreibung in das Programm eingetragen. Ein Name kann nur innerhalb eines Bereichs des Programmtextes verwendet werden, der als sein Gültigkeitsbereich bezeichnet wird. Ein Name hat einen Typ, der seine Verwendung bestimmt.

Ein Objekt ist ein Speicherbereich. Ein Objekt verfügt über eine Speicherklasse, die seine Lebensdauer bestimmt. Die Bedeutung des in einem Objekt gefundenen Werts wird durch die Art des Namens bestimmt, mit dem darauf zugegriffen wird.

Sichtbereich

Es gibt vier Arten von Bereichen: lokal, Datei, Programm und Klasse.

Lokal

Ein in einem Block beschriebener Name ist für diesen Block lokal und kann nur innerhalb dieses Blocks nach der Deklarationsstelle und in den von ihm abgedeckten Blöcken verwendet werden.

Eine Ausnahme bilden Beschriftungen, die überall in der Funktion verwendet werden können, in der sie beschrieben werden. Namen formaler Funktionsparameter werden so behandelt, als wären sie deklariert

V der äußerste Block dieser Funktion.

Ein außerhalb eines Blocks oder einer Klasse deklarierter Name kann in der Datei, in der er definiert ist, nach der Deklarationsstelle verwendet werden.

Der Name eines Klassenmitglieds ist für seine Klasse lokal und kann nur in einer Mitgliedsfunktion dieser Klasse verwendet werden, nachdem die Operation > auf ein Objekt seiner Klasse oder nachdem die Operation > auf einen Zeiger auf angewendet wurde ein Objekt seiner Klasse.

Statische Klassenmitglieder und Funktionsmitglieder können auch mit dem Operator :: referenziert werden, wenn ihr Klassenname im Gültigkeitsbereich liegt.

Einführung in die Programmiersprache C++

Eine innerhalb einer Klasse deklarierte Klasse gilt nicht als Mitglied und ihr Name gehört zum umschließenden Bereich.

Ein Name kann ausgeblendet werden, indem derselbe Name explizit in einem Block oder einer Klasse definiert wird. Ein Name in einem Block oder einer Klasse kann nur durch den Namen verborgen werden, der im abgedeckten Block oder in der abgedeckten Klasse beschrieben ist.

Ein versteckter nicht-lokaler Name kann auch verwendet werden, wenn sein Gültigkeitsbereich durch den ::-Operator angegeben wird.

Ein Klassenname, der durch einen Namen verdeckt wird, der kein Typname ist, kann dennoch verwendet werden, wenn ihm class, struct oder union vorangestellt ist. Ein Aufzählungsname enum, der von einem Namen verdeckt wird, der kein Typname ist, kann weiterhin verwendet werden, wenn ihm enum vorangestellt ist.

Kapitel 5. Definitionen

Eine Deklaration ist eine Definition, es sei denn, sie beschreibt Funktionen ohne Angabe eines Funktionskörpers, wenn sie den Bezeichner extern(1) enthält und es keinen Initialisierer oder Funktionskörper gibt oder wenn es sich um eine Klassendeklaration handelt.

Kapitel 6. Layout

Ein dateibezogener Name, der nicht explizit als statisch deklariert ist, ist für jede Datei in einem Programm mit mehreren Dateien gleich. Dies ist auch der Name der Funktion. Man sagt, solche Namen seien äußerlich.

Jede Beschreibung externer Name in einem Programm bezieht sich auf dasselbe Objekt, dieselbe Funktion, dieselbe Klasse, dieselbe Enumeration oder denselben Enumeratorwert.

Die in allen externen Namensdeklarationen angegebenen Typen müssen identisch sein. Es kann mehr als eine Typdefinition, Aufzählung, Inline-Funktion oder nicht zusammengesetzte Konstante geben, vorausgesetzt, die Definitionen sind identisch, erscheinen in verschiedenen Dateien und alle Initialisierer sind konstante Ausdrücke.

Einführung in die Programmiersprache C++

In allen anderen Fällen muss es im Programm genau eine Definition für den externen Namen geben.

Eine Implementierung erfordert möglicherweise, dass eine zusammengesetzte Konstante, die verwendet wird, wenn keine Definition von Konstanten vorkommt, explizit als extern deklariert werden muss und genau eine Definition im Programm haben muss. Die gleiche Einschränkung kann für Inline-Funktionen gelten.

Kapitel 7. Speicherklassen

Es werden zwei Speicherklassen beschrieben:

Auto

statisch.

Automatische Objekte sind für jeden Blockaufruf lokal und werden beim Verlassen zurückgesetzt.

Statische Objekte existieren und behalten während des gesamten Programms ihren Wert.

Einige Objekte sind nicht mit Namen verknüpft und ihre Lebensdauer wird explizit durch die Operatoren new und delete gesteuert.

Kapitel 8. Grundtypen

Als Zeichen (char) deklarierte Objekte reichen aus, um jedes Element des Maschinenzeichensatzes zu speichern. Wenn ein zu diesem Satz gehörendes Zeichen in einer Zeichenvariablen gespeichert wird, entspricht sein Wert dem ganzzahligen Code dieses Zeichens.

Derzeit gibt es drei Ganzzahlgrößen, die als short int , int und long int bezeichnet werden. Lange Ints stellen mindestens so viel Speicher bereit wie kurze Ints, aber wenn sie implementiert werden, können entweder Long, Short oder beide einer regulären Ganzzahl entsprechen.

„Gewöhnliche“ Ganzheiten haben eine natürliche Größe, die durch die Architektur der Zentralmaschine bestimmt wird; Andere Größen werden speziell für spezielle Anforderungen gefertigt.

Einführung in die Programmiersprache C++

Jede Aufzählung ist eine Menge benannter Konstanten. Die Enum-Eigenschaften sind identisch mit den Int-Eigenschaften. Ganzzahlen ohne Vorzeichen, die als vorzeichenlos bezeichnet werden, gehorchen den Regeln der Modulo2n-Arithmetik, wobei n die Anzahl der Bits in ihrer Darstellung ist.

Gleitkommazahlen mit einfacher (float) und doppelter (double) Genauigkeit können in einigen Maschinenimplementierungen synonym sein.

Da Objekte der oben aufgeführten Typen leicht als Zahlen interpretiert werden können, werden wir sie als arithmetische Typen bezeichnen.

Die Typen char, int aller Größen und enum werden zusammenfassend als Integer-Typen bezeichnet. Die Float- und Double-Typen werden zusammenfassend als Floating-Typen bezeichnet.

Der void-Datentyp definiert einen leeren Satz von Werten. Der (nicht vorhandene) Wert eines void-Objekts kann in keiner Weise verwendet werden und es können weder explizite noch implizite Konvertierungen angewendet werden.

Da ein leerer Ausdruck einen nicht vorhandenen Wert bezeichnet, kann ein solcher Ausdruck nur als Ausdrucksoperator oder als linker Operand in einem Semikolon-Ausdruck verwendet werden. Ein Ausdruck kann explizit in den Typ void konvertiert werden.

Kapitel 9. Abgeleitete Typen

Zusätzlich zu den arithmetischen Grundtypen gibt es konzeptionell unendlich viele abgeleitete Typen, die wie folgt aus den Grundtypen aufgebaut sind:

Arrays von Objekten dieser Art;

Funktionen, die Argumente eines bestimmten Typs empfangen und Objekte eines bestimmten Typs zurückgeben;

Zeiger auf Objekte dieses Typs;

Konstanten, die Werte eines bestimmten Typs sind;

Einführung in die Programmiersprache C++

Strukturen, bei denen es sich um Klassen ohne Zugriffsbeschränkungen handelt;

Assoziationen, das sind Strukturen, die das können andere Zeit enthalten Objekte unterschiedlichen Typs.

IN Im Allgemeinen können diese Methoden zum Konstruieren von Objekten rekursiv verwendet werden.

Ein Objekt vom Typ void* (ein Zeiger auf void) kann verwendet werden, um auf Objekte unbekannten Typs zu zeigen.

Objekte und LVALUE (Adressen)

Ein Objekt ist ein Speicherbereich; lvalue (Adresse) ist ein Ausdruck, der auf ein Objekt verweist. Ein offensichtliches Beispiel für einen Adressausdruck ist der Name eines Objekts.

Es gibt Operationen, die Adressausdrücke erzeugen: Wenn E beispielsweise ein Zeigerausdruck ist, dann ist *E ein Adressausdruck, der auf das Objekt verweist, auf das E zeigt.

Der Begriff „lvalue“ kommt vom Zuweisungsausdruck E1=E2, bei dem der linke Operand E1 ein Wertausdruck sein muss.

Die folgende Diskussion gibt für jeden Operator an, ob er Adressoperanden benötigt und ob er einen Adresswert zurückgibt.

Kapitel 11. Zeichen und ganze Zahlen

Wenn eine Ganzzahl verwendet werden kann, kann ein Zeichen oder eine kurze Ganzzahl verwendet werden. In allen Fällen wird der Wert in eine Ganzzahl umgewandelt.

Die Konvertierung einer kurzen Ganzzahl in eine lange Ganzzahl erfordert immer eine vorzeichenbehaftete Erweiterung; Ganzzahlen sind vorzeichenbehaftete Größen. Ob die Zeichen ein Vorzeichenbit enthalten oder nicht, ist maschinenabhängig. Der explizitere unsigned char-Typ begrenzt den Wert von 0 auf ein maschinenabhängiges Maximum.

Auf Computern, auf denen Zeichen als signiert behandelt werden, sind die Zeichen des ASCII-Codesatzes positiv.

Einführung in die Programmiersprache C++

Eine durch die Oktalfolge esc angegebene Zeichenkonstante unterliegt jedoch einer Vorzeichenerweiterung und kann zu einer negativen Zahl werden; so hat beispielsweise „\377“ den Wert 1 .

Wenn eine lange Ganzzahl in eine kurze Ganzzahl oder in ein Zeichen umgewandelt wird, wird sie nach links abgeschnitten; Überschüssige Bits gehen einfach verloren.

Schweben und verdoppeln

Float-Ausdrücke können Gleitkommaarithmetik mit einfacher Genauigkeit ausführen. Konvertierungen zwischen Zahlen mit einfacher und doppelter Genauigkeit werden so mathematisch korrekt durchgeführt, wie es die Hardware zulässt.

Schwebend und ganz

Konvertierungen vom Typ „Float“ in „Integral“ sind in der Regel maschinenabhängig. Insbesondere die Richtung der Kürzung negativer Zahlen variiert von Maschine zu Maschine. Reicht der für den Wert vorgesehene Platz nicht aus, ist das Ergebnis undefiniert.

Das Konvertieren eines Integralwerts in einen Float-Typ funktioniert gut. Wenn der Hardware-Implementierung die erforderlichen Bits fehlen, kommt es zu einem gewissen Präzisionsverlust.

Zeiger und ganze Zahlen

Ein Ausdruck vom Typ Integer kann einem Zeiger hinzugefügt oder daraus entfernt werden. In einem solchen Fall wird die erste transformiert, wie in der Diskussion der Additionsoperation gezeigt.

Sie können eine Subtraktion über zwei Zeiger auf Objekte desselben Typs durchführen; In diesem Fall wird das Ergebnis je nach Maschine in den Typ int oder long konvertiert.

Bei der Kombination einer vorzeichenlosen Ganzzahl und einer regulären Ganzzahl wird die reguläre Ganzzahl in den Typ ohne Vorzeichen konvertiert und das Ergebnis ist vom Typ ohne Vorzeichen.

Der Wert ist die kleinste vorzeichenlose Ganzzahl, die einer vorzeichenbehafteten Ganzzahl (mod 2** (Wortgröße)) entspricht (d. h. mod2** (Wortgröße)). In der Komplement-Binärdarstellung ist diese Konvertierung leer und in der Binärdarstellung erfolgt keine wirkliche Änderung.