Table Of ContentLizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältiugulnrgi.ch BREYMANN
AKTUELL
N ZU
E
OR C++ 1 7
T
U
A
EXTRA
E-Book
INSIDE
5. Aufl age
C++
- orderid - 25403069 - transid - 25403069_1D -
DER
E
N
PROGRAMMIERER
I
L
D
// C++ LERNEN
A
// PROFESSIONELL ANWENDEN
E
// LÖSUNGEN NUTZEN
H
Im Internet: alle Beispiele und mehr
auf www.cppbuch.de
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
Breymann
Der C++-Programmierer
- orderid - 25403069 - transid - 25403069_1D -
Bleiben Sie auf dem Laufenden!
Unser Computerbuch-Newsletter informiert
Sie monatlich über neue Bücher und Termine.
Profitieren Sie auch von Gewinnspielen und
exklusiven Leseproben. Gleich anmelden unter
www.hanser-fachbuch.de/newsletter
Hanser Update ist der IT-Blog des Hanser Verlags
mit Beiträgen und Praxistipps von unseren Autoren
rund um die Themen Online Marketing, Webent-
wicklung, Programmierung, Softwareentwicklung
sowie IT- und Projekt management. Lesen Sie mit
und abonnieren Sie unsere News unter
www.hanser-fachbuch.de/update
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
- orderid - 25403069 - transid - 25403069_1D -
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
Ulrich Breymann
Der C++-Programmierer
C++ lernen –
professionell anwenden –
Lösungen nutzen
Aktuell zu C++17
- orderid - 25403069 - transid - 25403069_1D -
5., überarbeitete Auflage
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
Prof. Dr. Ulrich Breymann lehrte Informatik an der Fakultät Elektrotechnik und Informatik
der Hochschule Bremen.
Kontakt: breymann@hs-bremen.de
Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach
bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz
auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informatio-
nen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag
übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus fol-
gende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser
Informationen – oder Teilen davon – entsteht.
Ebenso übernehmen Autor und Verlag keine Gewähr dafür, dass beschriebene Verfahren
usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handels-
namen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere
Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und
Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt
werden dürften.
Bibliogr-af ioscrhed Inefrorimda ti-o n2 d5er4 D0eu3ts0ch6en9 N -a titornaalbnibsliiodth e-k : 25403069_1D -
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbiblio-
grafie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt.
Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches,
oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung
des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch
nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektroni-
scher Systeme verarbeitet, vervielfältigt oder verbreitet werden.
© 2018 Carl Hanser Verlag München, www.hanser-fachbuch.de
Lektorat: Brigitte Bauer-Schiewek
Copy editing: Petra Kienle, Fürstenfeldbruck
Herstellung: Irene Weilhart
Umschlagdesign: Marc Müller-Bremer, www.rebranding.de, München
Umschlagrealisation: Stephan Rönigk
Datenbelichtung, Druck und Bindung: Kösel, Krugzell
Ausstattung patentrechtlich geschützt. Kösel FD 351, Patent-Nr. 0748702
Printed in Germany
Print-ISBN: 978-3-446-44884-1
E-Book-ISBN: 978-3-446-45386-9
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
Inhalt
Vorwort........................................................................................... 23
Teil I: Einführung in C++ ........................................................ 27
1 Esgehtlos!............................................................................... 29
- orderid - 25403069 - transid - 25403069_1D -
1.1 Historisches.................................................................................... 29
1.2 ObjektorientierteProgrammierung......................................................... 30
1.3 WerkzeugezumProgrammieren............................................................ 32
1.4 DasersteProgramm.......................................................................... 33
1.4.1 Namenskonventionen ............................................................. 39
1.5 IntegrierteEntwicklungsumgebung........................................................ 39
1.6 EinfacheDatentypenundOperatoren...................................................... 42
1.6.1 Ausdruck............................................................................ 42
1.6.2 GanzeZahlen....................................................................... 42
1.6.3 ReelleZahlen....................................................................... 49
1.6.4 Konstanten.......................................................................... 53
1.6.5 Zeichen.............................................................................. 54
1.6.6 LogischerDatentypbool.......................................................... 58
1.6.7 Referenzen.......................................................................... 59
1.6.8 RegelnzumBildenvonAusdrücken ............................................ 60
1.6.9 Standard-Typumwandlungen .................................................... 61
1.7 GültigkeitsbereichundSichtbarkeit........................................................ 62
1.7.1 Namespacestd...................................................................... 64
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
6 Inhalt
1.8 Kontrollstrukturen............................................................................ 65
1.8.1 Anweisungen....................................................................... 65
1.8.2 Sequenz(Reihung)................................................................. 67
1.8.3 Auswahl(Selektion,Verzweigung) .............................................. 67
1.8.4 Fallunterscheidungenmitswitch ................................................ 72
1.8.5 Wiederholungen.................................................................... 75
1.8.6 Kontrollemitbreakundcontinue ............................................... 82
1.9 BenutzerdefinierteundzusammengesetzteDatentypen................................. 84
1.9.1 Aufzählungstypen ................................................................. 84
1.9.2 Strukturen........................................................................... 87
1.9.3 DerC++-Standardtypvector ..................................................... 88
1.9.4 Zeichenketten:DerC++-Standardtypstring ................................... 93
1.9.5 ContainerundSchleifen .......................................................... 95
1.9.6 Typermittlungmitauto ........................................................... 97
1.9.7 DeklarationeinerstrukturiertenBindungmitauto............................ 98
1.9.8 UnionsundBitfelder .............................................................. 99
1.10 EinfacheEin-undAusgabe ................................................................. 101
1.10.1 Standardein-und-ausgabe....................................................... 101
1-.1 0o.2rdEeirn-idun d- A2us5g4ab0e3m0it6Da9te i-e nt.r..a...n..s..i.d... .-.. .2...5..4..0...3..0...6..9..._..1..D.... .-.... 104
2 Programmstrukturierung..............................................................109
2.1 Funktionen..................................................................................... 110
2.1.1 AufbauundPrototypen........................................................... 110
2.1.2 GültigkeitsbereicheundSichtbarkeitinFunktionen.......................... 112
2.1.3 Lokalestatic-Variable:FunktionmitGedächtnis.............................. 113
2.2 SchnittstellenzumDatentransfer........................................................... 114
2.2.1 ÜbergabeperWert................................................................. 115
2.2.2 ÜbergabeperReferenz ............................................................ 119
2.2.3 GefahrenbeiderRückgabevonReferenzen.................................... 120
2.2.4 VorgegebeneParameterwerteundunterschiedlicheParameterzahl......... 121
2.2.5 ÜberladenvonFunktionen ....................................................... 122
2.2.6 Funktionmain().................................................................... 123
2.2.7 BeispielTaschenrechnersimulation.............................................. 124
2.2.8 SpezifikationvonFunktionen.................................................... 129
2.2.9 AlternativeFunktions-Syntax.................................................... 129
2.3 ModulareProgrammgestaltung............................................................. 129
2.3.1 SteuerungderÜbersetzungnurmit#include.................................. 130
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
Inhalt 7
2.3.2 EinbindenvorübersetzterProgrammteile....................................... 131
2.3.3 Übersetzungseinheit,Deklaration,Definition .................................. 132
2.3.4 DateiübergreifendeGültigkeitundSichtbarkeit................................ 134
2.3.5 PräprozessordirektivenundMakros............................................. 136
2.4 Namensräume ................................................................................. 144
2.5 inline-Funktionenund-Variable ........................................................... 146
2.5.1 inline-Variablen.................................................................... 147
2.6 constexpr-Funktionen........................................................................ 147
2.7 Rückgabetypauto............................................................................. 150
2.8 Funktions-Templates ......................................................................... 151
2.8.1 SpezialisierungvonTemplates................................................... 153
2.8.2 EinbindenvonTemplates......................................................... 154
2.9 C++-Header.................................................................................... 156
2.9.1 EinbindenvonC-Funktionen .................................................... 158
3 Objektorientierung1 ....................................................................159
3.1 AbstrakterDatentyp.......................................................................... 160
3.2 KlassenundObjekte.......................................................................... 161
3.2.1 const-ObjekteundMethoden..................................................... 164
- orderid - 25403069 - transid - 25403069_1D -
3.2.2 inline-Elementfunktionen......................................................... 165
3.3 InitialisierungundKonstruktoren.......................................................... 166
3.3.1 Standardkonstruktor............................................................... 167
3.3.2 DirekteInitialisierungderAttribute............................................. 168
3.3.3 AllgemeineKonstruktoren........................................................ 168
3.3.4 Kopierkonstruktor.................................................................. 171
3.3.5 Typumwandlungskonstruktor.................................................... 174
3.3.6 Konstruktorundmehrvorgebenoderverbieten............................... 176
3.3.7 EinheitlicheInitialisierungundSequenzkonstruktor.......................... 176
3.3.8 DelegierenderKonstruktor........................................................ 179
3.3.9 constexpr-Konstruktorund-Methoden......................................... 180
3.4 Beispiel:RationaleZahlen................................................................... 183
3.4.1 Aufgabenstellung.................................................................. 183
3.4.2 Entwurf.............................................................................. 184
3.4.3 Implementation..................................................................... 187
3.5 Destruktoren................................................................................... 192
3.6 WiekommtmanzuKlassenundObjekten?EinBeispiel................................ 194
3.7 GegenseitigeAbhängigkeitvonKlassen................................................... 199
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
8 Inhalt
4 Intermezzo:Zeiger......................................................................201
4.1 ZeigerundAdressen.......................................................................... 202
4.2 C-Arrays........................................................................................ 205
4.2.1 C-Array,std::size()undsizeof.................................................... 207
4.2.2 InitialisierungvonC-Arrays...................................................... 208
4.2.3 Zeigerarithmetik.................................................................... 208
4.2.4 IndexoperatorbeiC-Arrays....................................................... 209
4.2.5 C-Arraymitbegin()undend()durchlaufen .................................... 209
4.3 C-Zeichenketten............................................................................... 210
4.3.1 SchleifenundC-Strings........................................................... 213
4.4 DynamischeDatenobjekte................................................................... 217
4.4.1 FreigebendynamischerObjekte.................................................. 220
4.5 ZeigerundFunktionen....................................................................... 222
4.5.1 ParameterübergabemitZeigern.................................................. 222
4.5.2 ArrayalsFunktionsparameter.................................................... 224
4.5.3 constundZeiger-Parameter...................................................... 225
4.5.4 Parameterdesmain-Programms................................................. 225
4.5.5 GefahrenbeiderRückgabevonZeigern........................................ 226
4.6 th-i so-Zredigeerr..i.d... .-.. .2..5...4..0...3..0..6...9.. ..-. .t..r..a...n..s..i.d... .-.. .2...5..4..0...3..0...6..9..._..1..D.... .-.... 227
4.7 MehrdimensionaleC-Arrays................................................................. 229
4.7.1 StatischemehrdimensionaleC-Arrays.......................................... 229
4.7.2 MehrdimensionalesArrayalsFunktionsparameter............................ 230
4.7.3 DynamischerzeugtemehrdimensionaleArrays................................ 233
4.7.4 KlassefürdynamischeszweidimensionalesArray ............................ 235
4.8 BinäreEin-/Ausgabe ......................................................................... 241
4.9 ZeigeraufFunktionen........................................................................ 244
4.10 TypumwandlungenfürZeiger............................................................... 248
4.11 ZeigeraufElementfunktionenund-daten ................................................ 249
4.11.1 ZeigeraufElementfunktionen.................................................... 249
4.11.2 ZeigeraufElementdaten.......................................................... 250
4.12 KomplexeDeklarationenlesen.............................................................. 250
4.12.1 Lesbarkeitmittypedefundusingverbessern .................................. 251
4.13 AlternativezurohenZeigern,newunddelete............................................ 253
5 Objektorientierung2 ...................................................................255
5.1 EineString-Klasse ............................................................................ 255
5.1.1 friend-Funktionen ................................................................. 261
Lizenziert für bandido1@gmx.ch.
© 2017 Carl Hanser Fachbuchverlag. Alle Rechte vorbehalten. Keine unerlaubte Weitergabe oder Vervielfältigung.
Inhalt 9
5.2 String-Ansicht................................................................................. 262
5.3 KlassenspezifischeDatenundFunktionen ................................................ 265
5.3.1 KlassenspezifischeKonstante..................................................... 269
5.4 Klassen-Templates............................................................................ 271
5.4.1 EinStack-Template................................................................ 271
5.4.2 StackmitstatischfestgelegterGröße............................................ 274
5.5 Typbestimmungmitdecltypeunddeclval................................................. 275
6 Vererbung .................................................................................279
6.1 VererbungundInitialisierung............................................................... 285
6.2 Zugriffsschutz................................................................................. 286
6.3 TypbeziehungzwischenOber-undUnterklasse.......................................... 288
6.4 Code-Wiederverwendung.................................................................... 289
6.4.1 Konstruktorerben.................................................................. 290
6.5 ÜberschreibenvonFunktioneninabgeleitetenKlassen................................. 292
6.5.1 VirtuelleFunktionen............................................................... 294
6.5.2 AbstrakteKlassen.................................................................. 299
6.5.3 VirtuellerDestruktor............................................................... 304
6.5.4 PrivatevirtuelleFunktionen...................................................... 307
- orderid - 25403069 - transid - 25403069_1D -
6.6 ProblemederModellierungmitVererbung................................................ 309
6.7 Mehrfachvererbung........................................................................... 312
6.7.1 Namenskonflikte................................................................... 314
6.7.2 VirtuelleBasisklassen ............................................................. 315
6.8 Standard-Typumwandlungsoperatoren.................................................... 319
6.9 TypinformationenzurLaufzeit.............................................................. 322
6.10 Using-Deklarationfürprotected-Funktionen............................................. 323
6.11 Private-undProtected-Vererbung.......................................................... 324
7 Fehlerbehandlung........................................................................329
7.1 Ausnahmebehandlung ....................................................................... 331
7.1.1 Exception-SpezifikationinDeklarationen...................................... 334
7.1.2 Exception-HierarchieinC++..................................................... 335
7.1.3 BesondereFehlerbehandlungsfunktionen....................................... 337
7.1.4 ErkennenlogischerFehler ........................................................ 338
7.1.5 ArithmetischeFehler/Divisiondurch0........................................ 340
7.2 Speicherbeschaffungmitnew............................................................... 341
7.3 Exception-Sicherheit ......................................................................... 342