Sie sind auf Seite 1von 451

Objektorientierte Programmierung mit C++

Ulrich Breymann Hochschule Bremen

Kurs auf Basis des Buchs C++ Einführung und professionelle Programmierung, 7. Auflage c Hanser Verlag München

Datei vom 6. Januar 2003

Breymann C++, c Hanser Verlag München

Inhalt 1 zurück Ende
Inhalt
1 zurück
Ende

Hinweise

Copyright: Dieses Dokument darf frei zu Unterrichtszwecken benutzt und beliebig oft elek- tronisch vervielfältigt werden. Jegliche andere Vervielfältigung, wie etwa Ausdrucken, ist nicht erlaubt.

Die Quellen sind frei erhältlich und dürfen angepasst und ergänzt werden, sofern dieser Copyright- Hinweis sowie der folgende Literaturhinweis auf meine Bücher unverändert Bestandteil bleiben und deutlich am Anfang des Dokuments erscheinen.

Literatur

Dieses Dokument basiert auf meinem Buch Ulrich Breymann: C++ - Einführung und professionelle Programmierung . Hanser Verlag, siehe auch http://www.informatik.hs-bremen.de/ ~ brey/cppbuch.html Die Kapitelnummerierung entspricht der des Buchs, bis auf das letzte Kapitel, das sich auf das folgende STL-Buch bezieht.

Ulrich Breymann: Komponenten entwerfen mit der C++ STL . Addison-Wesley; als pdf-Datei frei erhältlich, siehe http://www.informatik.hs-bremen.de/ ~ brey/stlb.html

ISO/IEC 14882-1998, International Standard -Programming Language -C++ , elektronisch über www.ansi.org erhältlich.

Scott Meyers: Effektiv C++ programmieren . Addison-Wesley

Scott Meyers: More Effective C++ . Addison-Wesley

Bjarne Stroustrup: The C++ -Programming Language , Addison-Wesley

Roter Text ist i.a. klickbar (z.B. Inhaltsverzeichnis) und führt direkt zur gewünschten Stelle.

Breymann C++, c Hanser Verlag München

Inhalt 2 zurück Ende
Inhalt
2 zurück
Ende

Inhalt

1 Einführung

9

2 Grundlegende Begriffe

 

15

2.1 Das erste Programm

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

16

2.2 Einfache Datentypen und Operatoren

 

19

2.2.1 Ausdruck

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

2.2.2 Ganze Zahlen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

21

2.2.3 Reelle Zahlen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

26

2.2.4 Komplexe Zahlen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

32

2.2.5 Zeichen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

2.2.6 Logischer Datentyp

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

37

2.2.7 Referenzen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

39

2.3 Gültigkeitsbereich und Sichtbarkeit

 

40

2.4 Kontrollstrukturen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

2.4.1 Sequenz (Reihung)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

2.4.2 Auswahl (Selektion, Verzweigung)

 

43

Breymann C++, c Hanser Verlag München

Inhalt 3 zurück Ende
Inhalt
3 zurück
Ende
 

2.4.3 Fallunterscheidungen (switch)

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

48

2.4.4 Schleifen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

2.4.5 Kontrolle mit break und continue

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

60

2.5

Benutzerdefinierte und zusammengesetzte Datentypen

 

64

2.5.1 Aufzählungstypen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

64

2.5.2 Arrays: Der C++ Standardtyp vector

 

67

2.5.3 Zeichenketten: Der C++ Standardtyp string

 

76

2.5.4 Strukturierte Datentypen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

79

3 Einfache Ein- und Ausgabe

 

81

3.1 Standard- Ein- und -Ausgabe

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

82

3.2 Ein- und Ausgabe mit Dateien

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

86

4 Programmstrukturierung

 

89

4.1 Funktionen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

90

 

4.1.1 Aufbau und Prototypen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

90

4.1.2 Gültigkeitsbereiche und Sichtbarkeit in Funktionen

 

94

4.2 Schnittstellen zum Datentransfer

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

97

 

4.2.1 Übergabe per Wert

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

98

4.2.2 Übergabe per Referenz

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 101

4.2.3 Gefahren bei der Rückgabe von Referenzen

 

104

4.2.4 Vorgabewerte und variable Parameterzahl

 

105

4.2.5 Überladen von Funktionen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 107

4.2.6 Funktion main

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 109

4.3 Grundsätze der modularen Gestaltung

 

111

 

4.3.1

Steuerung der Übersetzung mit #include

 

112

Breymann C++, c Hanser Verlag München

Inhalt 4 zurück Ende
Inhalt
4 zurück
Ende

4.3.2

Einbinden vorübersetzter Programmteile

113

 

4.3.3 Dateiübergreifende Gültigkeit und Sichtbarkeit

 

118

4.3.4 Übersetzungseinheit, Deklaration und Definition

 

121

4.3.5 Compilerdirektiven

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 127

4.4 Funktions-Templates

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 136

4.5 inline-Funktionen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 141

5

Objektorientierung 1

 

143

5.1 Abstrakte Datentypen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 144

5.2 Klassen und Objekte

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 148

 

5.2.1

inline-Elementfunktionen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 154

5.3 Initialisierung und Konstruktoren

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 157

 

5.3.1 Standardkonstruktor

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 157

5.3.2 Allgemeine Konstruktoren

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 159

5.3.3 Kopierkonstruktor

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 165

5.3.4 Typumwandlungskonstruktor

 

168

5.4 Beispiel: Klasse für rationale Zahlen

 

172

 

5.4.1 Aufgabenstellung

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 172

5.4.2 Entwurf

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 175

5.4.3 Implementation

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 181

5.5 const-Objekte und Methoden

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 188

5.6 Faustregeln zur Konstruktion von Schnittstellen

 

189

5.7 Destruktoren

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 198

5.8 Wie kommt man zu Klassen und Objekten? Ein Beispiel

 

201

 

5.8.1

Einige Analyse-Überlegungen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

203

Breymann C++, c Hanser Verlag München

Inhalt 5 zurück Ende
Inhalt
5 zurück
Ende

6

Intermezzo: Zeiger

205

6.1 Zeiger und Adressen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 206

C-Arrays

6.2 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

212

6.2.1 C-Arrays und sizeof

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

216

6.2.2 Indexoperator bei C-Arrays

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

218

6.2.3 Initialisierung von C-Arrays

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

218

6.3 C-Zeichenketten

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

219

6.4 Dynamische Datenobjekte

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

229

6.4.1

Freigeben dynamischer Objekte

 

233

6.5 Mehrdimensionale C-Arrays

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

237

6.5.1 Statische mehrdimensionale C-Arrays

 

237

6.5.2 Dynamisch erzeugte mehrdimensionale Arrays

 

247

6.6 Binäre Ein-/Ausgabe

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

253

6.7 Zeiger und Funktionen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 256

6.7.1 Parameterübergabe mit Zeigern

 

256

6.7.2 Gefahren bei der Rückgabe von Zeigern

 

259

6.8 Zeiger auf Funktionen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

260

6.9 this-Zeiger

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.