Cpp-Skript SS18.Pdf

Cpp-Skript SS18.Pdf

Programmierung mit C++ für Computerlinguisten CIS, LMU München Max Hadersbeck Mitarbeiter Daniel Bruder, Ekaterina Peters, Jekaterina Siilivask, Kiran Wallner, Stefan Schweter, Susanne Peters, Nicola Greth — Version Sommersemester 2018 — Inhaltsverzeichnis 1 Einleitung1 1.1 Prozedurale und objektorientierte Programmiersprachen . .1 1.2 Encapsulation, Polymorphismus, Inheritance . .1 1.3 Statische und dynamische Bindung . .2 1.4 Die Geschichte von C++ . .2 1.5 Literaturhinweise . .3 2 Traditionelle und objektorientierte Programmierung4 2.1 Strukturiertes Programmieren . .4 2.2 Objektorientiertes Programmieren . .5 3 Grundlagen7 3.1 Installation von Eclipse und Übungsskript . .7 3.2 Starten eines C++ Programms . .7 3.3 Allgemeine Programmstruktur . .8 3.4 Kommentare in Programmen . 10 3.5 Variablen . 11 3.5.1 Was sind Variablen? . 11 3.5.2 Regeln für Variablen . 12 3.5.3 Grundtypen von Variablen . 12 3.5.4 Deklaration und Initialisierung von Variablen . 13 3.5.5 Lebensdauer von Variablen . 14 3.5.6 Gültigkeit von Variablen . 15 3.6 Namespace . 16 3.6.1 Defaultnamespace . 16 3.7 Zuweisen von Werten an eine Variable . 17 3.8 Einlesen und Ausgeben von Variablenwerten . 19 3.8.1 Einlesen von Daten . 19 3.8.2 Zeichenweises Lesen und Ausgeben von Daten . 21 3.8.3 Ausgeben von Daten . 22 3.8.4 Arbeit mit Dateien . 23 3.8.4.1 Textdateien unter Unix ................... 23 3.8.4.2 Textdateien unter Windows ................ 24 3.8.4.3 Lesen aus einer Datei . 25 3.8.4.4 Lesen aus einer WINDOWS Textdatei . 26 i ii Inhaltsverzeichnis 3.8.4.5 Schreiben in eine Datei . 26 3.9 Operatoren . 29 3.9.1 Arithmetische Operatoren . 30 3.9.2 Relationale und Logische Operatoren . 30 3.9.3 Die Wahrheitstabelle bei logischen Ausdrücken . 31 3.9.4 String Operatoren . 31 3.9.4.1 Zuweisungsoperator: = .................... 31 3.9.4.2 Verknüpfungsoperator: + .................. 31 3.9.4.3 Lexikographischer Vergleich bei Strings: . 32 4 Konstanten 33 5 Strukturierung von Programmen 37 5.1 Kontrollstrukturen . 37 5.1.1 Statements und Blöcke . 37 5.2 compound statement . 37 5.3 Selection-Statements . 38 5.3.1 Selection-Statement: if , if - else ................. 38 5.3.2 Selection-Statement: switch ..................... 39 5.4 Iteration-Statements . 40 5.4.1 Iteration-Statement: while ...................... 40 5.4.2 Iteration-Statement: do ........................ 41 5.4.3 Iteration-Statement: for ........................ 42 5.4.4 Iteration-Statement: range-for .................... 43 5.5 Das Wichtigste in Kürze . 44 6 Einsatz von Strings 46 6.1 Einf�hrung . 46 6.1.1 Bitbreite der Buchstaben von Strings . 46 6.1.2 Deklaration und Initialisierung von Stringvariablen mit 8-Bit Buch- stabencode . 47 6.2 Methoden f�r Stringobjekte . 47 6.3 Konstruktion eines Strings . 49 6.4 Destruktion eines Strings . 49 6.5 Zugriff auf die Buchstaben eines Strings . 49 6.6 Alphabetischer Vergleich von Strings . 50 6.7 Suchen innerhalb eines Strings . 53 6.8 Modifizieren eines Strings . 53 6.9 C++ Strings und C Strings . 57 6.10 Das Wichtigste in K�rze . 57 Inhaltsverzeichnis iii 7 Funktionen 59 7.1 Motivation . 59 7.2 Funktionstyp . 61 7.3 Funktionsname . 62 7.4 Funktionsargumente . 62 7.5 Defaultwerte für Funktionsargumente . 62 7.6 Funktionsrumpf . 63 7.7 Die Argumentübergaben . 63 7.7.1 Übergabe des Werts eines Arguments . 64 7.7.2 Übergabe einer Referenz auf ein Argument . 64 7.7.3 Beispiele Value vs. Referenz . 64 7.7.4 Seiteneffekte . 65 7.8 Überladen von Funktionen . 67 7.9 Mehrdeutigkeiten durch Überladen der Funktionen . 68 8 Internationalisierung unter C++ 70 8.1 Einführung in Kodierungen . 70 8.2 Unicode Transformation Format: UTF-8 . 70 8.3 Datentypen für Unicode-Zeichen . 72 8.4 Locales und Imbuing . 73 8.4.1 Localeabhängiges Arbeiten bei UCS Codierung . 74 8.5 UCS Zeichen und Datei-Streams . 76 8.5.1 Konvertierung von utf8 nach ISO-Latin . 76 8.5.2 Ausgabe einer UTF8- kodierten Datei . 77 8.6 Das Wichtigste in Kürze . 78 9 Programmieren von Klassen 80 9.1 Einführung . 80 9.2 Deklaration von Klassen . 80 9.3 Deklaration von Klassenobjekten . 81 9.4 Beispiel mit Klassen . 82 9.5 Initialisierung der Daten eines Objekts . 85 9.6 Löschen der Daten eines Objekts . 87 9.7 Kopieren der Daten eines Objekts . 87 9.8 Das Überladen von Operatoren . 88 9.9 Überladen von relationalen und logischen Operatoren . 89 9.10 Überladen von unären Operatoren . 89 9.11 Überladen des Output-Operators . 90 10 Vererbung 92 10.1 Einleitung . 92 10.2 Vererbung von Zugriffsrechten . 93 iv Inhaltsverzeichnis 10.3 Spezielle Methoden werden nicht vererbt . 94 10.4 Zuweisung von Objekten einer Unterklasse an Objekte der Oberklasse . 97 10.5 Überschreiben von Methoden/Funktionen in der abgeleiteten Klasse . 97 10.6 Polymorphismus . 98 11 Templates 101 11.1 Generische Funktionen . 101 11.2 Generische Klassen . 103 11.3 Erweiterung des Beispiels memory . 106 12 Standard Template Library (STL) 111 12.1 Iteratoren der STL . 111 12.2 Klassen der STL für die Computerlinguistik . 115 12.2.1 wchar_t . 115 12.2.2 wstring ................................. 115 12.3 Utilities der STL für die Computerlinguistik . 116 12.3.1 pair <type1, type2> ......................... 116 12.3.1.1 make_pair()- Hilfsfunktion . 116 12.4 Container der STL für die Computerlinguistik . 119 12.4.1 Überblick . 119 12.4.2 Einsatz der Container . 119 12.4.3 vector <type> ............................. 120 12.4.4 list<type> ............................... 124 12.4.5 deque<type> . 127 12.4.6 set <type> . 127 12.4.6.1 Beispiel mit dem Container set .............. 128 12.4.7 map <type1,type2> . 129 12.4.7.1 Beispiel zur Berechnung einer Frequenzliste mit map ... 130 12.4.8 unordered_set<type>, unordered_map<type1,type2> . 132 12.4.8.1 Implementation der Hash-Templates der STL mit dem gcc 132 12.5 STL-Algorithmen . 136 12.5.1 Vorbemerkung: Laufzeiten . 136 12.5.1.1 Der Headerfile algorithm für Algorithmen . 137 12.5.1.2 find():............................ 138 12.5.1.3 find_first_of():...................... 139 12.5.1.4 find_last_of():...................... 139 12.5.1.5 find_first_not_of():................... 141 12.5.1.6 find_last_not_of():.................... 142 12.5.1.7 find_if():.......................... 142 12.5.1.8 find_end():......................... 143 12.5.1.9 adjacent_find():...................... 144 12.5.1.10 search():.......................... 145 Inhaltsverzeichnis v 12.5.1.11 search_n():......................... 146 12.5.1.12 count():........................... 147 12.5.1.13 count_if():......................... 148 12.5.1.14 equal():........................... 149 12.5.1.15 mismatch():......................... 150 12.5.1.16 replace():.......................... 151 12.5.1.17 replace_copy():...................... 151 12.5.1.18 replace_copy_if():.................... 151 12.5.1.19 replace_if():........................ 152 12.5.1.20 unique():.......................... 152 12.5.1.21 unique_copy():....................... 152 12.5.1.22 sort():............................ 153 12.5.1.23 transform():........................ 154 12.5.1.24 for_each():......................... 155 13 Erweiterung um reguläre Ausdücke, die Bibliothek Boost::Regex 156 13.1 Integration des Pakets Boost . 156 13.1.1 Installation des Pakets Boost . 156 13.1.2 Kompilieren unter Verwendung der Bibliothek Boost::Regex ... 157 13.1.3 Einbinden von Boost::Regex in Eclipse . 157 13.1.4 Verwendung von Boost::Regex .................... 158 13.2 Verwendung von Regex mit C++11 . 158 13.3 Suchen nach einem regulären Ausdruck: regex_match ........... 158 13.4 Suchen nach einem regulären Ausdruck: regex_search() ......... 160 13.5 Ersetzen in einem String mit einem regulären Ausdruck: regex_replace() 162 13.6 UNICODE und Lokalisierung mit boost . ..

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    247 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us