90

Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard
Page 2: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Auf einen Blick

Über dieses Buch............................................................. 171 OOP-Paradigma und C++ ................................................ 192 Erste Schritte mit C++ ..................................................... 393 OOP-unabhängige Sprachelemente von C++ .................. 694 Klassen ............................................................................ 975 Verwenden von Objekten................................................ 1176 Dynamische Speicherverwaltung..................................... 1437 Mehr über Klassen .......................................................... 1758 Überladen von Operatoren.............................................. 2019 Typumwandlungen .......................................................... 235

10 Abgeleitete Klassen......................................................... 25111 Polymorphie .................................................................... 28312 Mehrfachvererbung ......................................................... 32113 Namensbereiche.............................................................. 34314 Funktions-Templates....................................................... 36515 Klassen-Templates........................................................... 38916 Exception-Handling......................................................... 41717 Mehr über Exceptions ..................................................... 44518 Die Standard-Klasse string .............................................. 46319 Type-Casts und Typinformationen................................... 48520 Streams für die Ein- und Ausgabe .................................. 50321 Datei- und String-Streams............................................... 541

Anhang ............................................................................ 569C-Tutorial ........................................................................ 571Die String-Bibliothek....................................................... 611I/O-Stream-Bibliothek..................................................... 627Die Container-Bibliothek................................................. 655Die Algorithmen-Bibliothek ............................................ 699Die numerische Bibliothek .............................................. 717Komplexe Zahlen............................................................. 719Vektoren.......................................................................... 729Numerische Grenzwerte .................................................. 747Operatorenübersicht und Vorrangtabelle........................ 755Schlüsselwörter in C++.................................................... 759Literatur........................................................................... 761Die CD zum Buch ............................................................ 763Index ............................................................................... 765

Page 3: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

I

1.1 Konzepte der OOP ................................................................................ 20

1.2 Datenabstraktion .................................................................................. 22

1.3 Datenkapselung .................................................................................... 24

1.4 Vererbung ............................................................................................. 26

1.5 Entwicklung von C++ ............................................................................ 28

1.6 Eigenschaften von C++ .......................................................................... 30

1.7 Entwicklung eines C++-Programms ...................................................... 32

1.8 Übungen ............................................................................................... 34

1.9 Lösungen .............................................................................................. 36

1.10 Lösungen (Fortsetzung) ........................................................................ 38

2.1 Kommentare ......................................................................................... 40

2.2 Klassen für die Standard-Ein- und Ausgabe .......................................... 42

2.3 Ausgaben mit cout ................................................................................ 44

2.4 Eingaben mit cin ................................................................................... 46

2.5 Einlesen von Zeichen und Strings ......................................................... 48

2.6 Plazierung von Deklarationen ............................................................... 50

2.7 Prototyp von Funktionen ...................................................................... 52

2.8 Inline-Funktionen ................................................................................. 54

2.9 Aufzählungen ........................................................................................ 56

2.10 Der Datentyp bool ................................................................................ 58

2.11 Übungen ............................................................................................... 60

2.12 Lösungen .............................................................................................. 63

2.13 Lösungen (Fortsetzung) ........................................................................ 64

2.14 Lösungen (Fortsetzung) ........................................................................ 66

2.15 Lösungen (Fortsetzung) ........................................................................ 68

nhalt

Über dieses Buch 17

1 OOP-Paradigma und C++ 19

2 Erste Schritte mit C++ 39

Inhalt 7

Page 4: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

8

3.1 Default-Argumente ............................................................................... 70

3.2 Überladen von Funktionen ................................................................... 72

3.3 const-Deklarationen ............................................................................. 74

3.4 const-Deklaration von Zeigern ............................................................. 76

3.5 const-Deklaration von Parametern ....................................................... 78

3.6 Definition von Referenzen .................................................................... 80

3.7 Referenzen als Parameter ..................................................................... 82

3.8 Referenzen als Ergebnistyp ................................................................... 84

3.9 Übungen ............................................................................................... 86

3.10 Übungen ............................................................................................... 88

3.11 Lösungen .............................................................................................. 90

3.12 Lösungen (Fortsetzung) ........................................................................ 92

3.13 Lösungen (Fortsetzung) ........................................................................ 94

3.14 Lösungen (Fortsetzung) ........................................................................ 96

4.1 Definition von Klassen .......................................................................... 98

4.2 Definition von Elementfunktionen ....................................................... 100

4.3 Objekte (1) ........................................................................................... 102

4.4 Objekte (2) ........................................................................................... 104

4.5 Konstruktoren (1) ................................................................................. 106

4.6 Konstruktoren (2) ................................................................................. 108

4.7 Destruktoren ........................................................................................ 110

4.8 Übungen ............................................................................................... 112

4.9 Lösungen .............................................................................................. 114

4.10 Lösungen (Fortsetzung) ........................................................................ 116

5.1 Inline-Methoden .................................................................................. 118

5.2 Zugriffsmethoden ................................................................................. 120

5.3 const-Objekte ....................................................................................... 122

5.4 Der Zeiger this ...................................................................................... 124

5.5 Objekte als Argumente (1) ................................................................... 126

5.6 Objekte als Argumente (2) ................................................................... 128

5.7 Objekte als Return-Wert ...................................................................... 130

3 OOP-unabhängige Sprachelemente von C++ 69

4 Klassen 97

5 Verwenden von Objekten 117

Inhalt

Page 5: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

5.8 Klassen-Arrays ...................................................................................... 132

5.9 Übungen ............................................................................................... 134

5.10 Lösungen .............................................................................................. 136

5.11 Lösungen (Fortsetzung) ........................................................................ 138

5.12 Lösungen (Fortsetzung) ........................................................................ 140

6.1 Die neuen Operatoren new und delete ................................................. 144

6.2 Speicherreservierung für Standard-Datentypen .................................... 146

6.3 Speicher freigeben ................................................................................ 148

6.4 Speicherverwaltung für Klassen ............................................................ 150

6.5 Fehlerbehandlung ................................................................................. 152

6.6 Dynamische Elemente (1) ..................................................................... 154

6.7 Dynamische Elemente (2) ..................................................................... 156

6.8 Dynamische Elemente (3) ..................................................................... 158

6.9 Kopierkonstruktor ................................................................................. 160

6.10 Zuweisungsoperator ............................................................................. 162

6.11 Übungen ............................................................................................... 164

6.12 Übungen ............................................................................................... 166

6.13 Lösungen .............................................................................................. 168

6.14 Lösungen (Fortsetzung) ........................................................................ 170

6.15 Lösungen (Fortsetzung) ........................................................................ 172

6.16 Lösungen (Fortsetzung) ........................................................................ 174

7.1 Objekte als Klassenelemente ................................................................ 176

7.2 Initialisierung von Teilobjekten ............................................................. 178

7.3 Konstante Datenelemente .................................................................... 180

7.4 Statische Datenelemente ...................................................................... 182

7.5 Statische Methoden .............................................................................. 184

7.6 friend-Funktionen ................................................................................. 186

7.7 friend-Klassen ....................................................................................... 188

7.8 Elementzeiger ....................................................................................... 190

7.9 Übungen ............................................................................................... 192

7.10 Lösungen .............................................................................................. 194

7.11 Lösungen (Fortsetzung) ........................................................................ 196

7.12 Lösungen (Fortsetzung) ........................................................................ 198

6 Dynamische Speicherverwaltung 143

7 Mehr über Klassen 175

Inhalt 9

Page 6: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

10

8.1 Grundlagen ........................................................................................... 202

8.2 Operatorfunktionen .............................................................................. 204

8.3 Operator-Überladung mit friend-Funktionen ....................................... 206

8.4 Operator-Überladung mit Elementfunktionen ...................................... 208

8.5 Überladen der Shift-Operatoren ........................................................... 210

8.6 Operatoren für Arrays überladen .......................................................... 212

8.7 Überladen von new und delete ............................................................ 214

8.8 Globale Überladung .............................................................................. 216

8.9 Klassenspezifische Überladung ............................................................. 218

8.10 Übungen ............................................................................................... 220

8.11 Übungen ............................................................................................... 222

8.12 Lösungen .............................................................................................. 224

8.13 Lösungen (Fortsetzung) ........................................................................ 226

8.14 Lösungen (Fortsetzung) ........................................................................ 228

8.15 Lösungen (Fortsetzung) ........................................................................ 230

8.16 Lösungen (Fortsetzung) ........................................................................ 232

9.1 Typumwandlungen ............................................................................... 236

9.2 Konvertierungskonstruktoren ............................................................... 238

9.3 Konvertierungsfunktionen .................................................................... 240

9.4 Mehrdeutigkeiten ................................................................................. 242

9.5 Übungen ............................................................................................... 244

9.6 Lösungen .............................................................................................. 246

9.7 Lösungen (Fortsetzung) ........................................................................ 248

9.8 Lösungen (Fortsetzung) ........................................................................ 250

10.1 Vererbung ............................................................................................. 252

10.2 Definition abgeleiteter Klassen (1) ....................................................... 254

10.3 Definition abgeleiteter Klassen (2) ....................................................... 256

10.4 Methoden abgeleiteter Klassen ............................................................ 258

10.5 Redefinition von Klassenelementen ..................................................... 260

10.6 Konstruktoren ...................................................................................... 262

8 Überladen von Operatoren 201

9 Typumwandlungen 235

10 Abgeleitete Klassen 251

Inhalt

Page 7: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

10.7 Basisinitialisierer ................................................................................... 264

10.8 Verwendung abgeleiteter Klassen ......................................................... 266

10.9 protected-Elemente .............................................................................. 268

10.10 protected- und private-Vererbung ........................................................ 270

10.11 Übungen ............................................................................................... 272

10.12 Lösungen .............................................................................................. 274

10.13 Lösungen (Fortsetzung) ........................................................................ 276

10.14 Lösungen (Fortsetzung) ........................................................................ 278

10.15 Lösungen (Fortsetzung) ........................................................................ 280

11.1 Konvertierung abgeleiteter Klassen (1) ................................................. 284

11.2 Konvertierung abgeleiteter Klassen (2) ................................................. 286

11.3 Virtuelle Funktionen (1) ........................................................................ 288

11.4 Virtuelle Funktionen (2) ........................................................................ 290

11.5 Virtuelle Funktionen (3) ........................................................................ 292

11.6 Statische und dynamische Bindung ...................................................... 294

11.7 Implementierung dynamischer Bindung ............................................... 296

11.8 Virtuelle Destruktoren .......................................................................... 298

11.9 Rein virtuelle Funktionen ...................................................................... 300

11.10 Abstrakte Klassen ................................................................................. 302

11.11 Vererbung dynamischer Komponenten ................................................. 304

11.12 Virtuelle Operatorfunktionen ................................................................ 306

11.13 Übungen ............................................................................................... 308

11.14 Übungen ............................................................................................... 310

11.15 Lösungen .............................................................................................. 312

11.16 Lösungen (Fortsetzung) ........................................................................ 314

11.17 Lösungen (Fortsetzung) ........................................................................ 316

11.18 Lösungen (Fortsetzung) ........................................................................ 318

12.1 Definition mehrfacher Ableitungen ....................................................... 322

12.2 Mehrdeutigkeiten ................................................................................. 324

12.3 Virtuelle Basisklassen ............................................................................ 326

12.4 Initialisierung ........................................................................................ 328

12.5 Übungen ............................................................................................... 330

12.6 Übungen ............................................................................................... 332

11 Polymorphie 283

12 Mehrfachvererbung 321

Inhalt 11

Page 8: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

12

12.7 Lösungen .............................................................................................. 334

12.8 Lösungen (Fortsetzung) ........................................................................ 336

12.9 Lösungen (Fortsetzung) ........................................................................ 338

12.10 Lösungen (Fortsetzung) ........................................................................ 340

13.1 Namensbereiche ................................................................................... 344

13.2 using-Deklaration und -Direktive ......................................................... 346

13.3 Verschachteln von Namensbereichen ................................................... 348

13.4 Aliasnamen, Anonyme Namensbereiche ............................................... 350

13.5 Verwenden von C-Modulen ................................................................. 352

13.6 Übungen ............................................................................................... 354

13.7 Übungen ............................................................................................... 356

13.8 Lösungen .............................................................................................. 358

13.9 Lösungen (Fortsetzung) ........................................................................ 360

13.10 Lösungen (Fortsetzung) ........................................................................ 362

14.1 Konzept ................................................................................................ 366

14.2 Definition von Funktions-Templates .................................................... 368

14.3 Generierung von Template-Funktionen ................................................ 370

14.4 Typanpassungen ................................................................................... 372

14.5 Spezialisierungen von Template-Funktionen ........................................ 374

14.6 Spezialisierung (ANSI) .......................................................................... 376

14.7 Explizite Argumente für Funktions-Templates ...................................... 378

14.8 Übungen ............................................................................................... 380

14.9 Lösungen .............................................................................................. 382

14.10 Lösungen (Fortsetzung) ........................................................................ 384

14.11 Lösungen (Fortsetzung) ........................................................................ 386

15.1 Konzept ................................................................................................ 390

15.2 Definition von Klassen-Templates ........................................................ 392

15.3 Methoden von Klassen-Templates ....................................................... 394

15.4 Generierung von Template-Klassen ...................................................... 396

13 Namensbereiche 343

14 Funktions-Templates 365

15 Klassen-Templates 389

Inhalt

Page 9: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

15.5 Template-Parameter .............................................................................. 398

15.6 Template-Argumente ............................................................................ 400

15.7 Default-Argumente von Templates ....................................................... 402

15.8 Explizite Instantiierung ......................................................................... 404

15.9 Übungen ............................................................................................... 406

15.10 Übungen ............................................................................................... 408

15.11 Lösungen .............................................................................................. 410

15.12 Lösungen (Fortsetzung) ........................................................................ 412

15.13 Lösungen (Fortsetzung) ........................................................................ 414

16.1 Konzept des Exception-Handlings ........................................................ 418

16.2 Auslösen von Exceptions ...................................................................... 420

16.3 Auffangen von Exceptions (1) ............................................................... 422

16.4 Auffangen von Exceptions (2) ............................................................... 424

16.5 Handler-Suche ...................................................................................... 426

16.6 Verschachteln von try-Blöcken .............................................................. 428

16.7 Fehlerklassen ........................................................................................ 430

16.8 Klassenspezifische Exceptions .............................................................. 432

16.9 Übungen ............................................................................................... 434

16.10 Übungen ............................................................................................... 436

16.11 Lösungen .............................................................................................. 438

16.12 Lösungen (Fortsetzung) ........................................................................ 440

17.1 Fehlerklassen-Hierarchien ..................................................................... 446

17.2 Verwendung von Standard-Exceptions ................................................. 448

17.3 Exception-Spezifikation ........................................................................ 450

17.4 Unerwartete Exceptions ........................................................................ 452

17.5 Die Funktion set_terminate() ................................................................ 454

17.6 Exception-Spezifikation virtueller Funktionen ...................................... 456

17.7 Übungen ............................................................................................... 458

17.8 Lösung .................................................................................................. 460

17.9 Lösung (Fortsetzung) ............................................................................ 462

16 Exception-Handling 417

17 Mehr über Exceptions 445

Inhalt 13

Page 10: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

14

18.1 Die String-Bibliothek ............................................................................ 464

18.2 Konstruktoren der Klasse string ........................................................... 466

18.3 Länge und Kapazität von Strings .......................................................... 468

18.4 Konvertierung, Exceptions .................................................................... 470

18.5 Zugriff auf einzelne Zeichen .................................................................. 472

18.6 Einfügen und Löschen in Strings .......................................................... 474

18.7 Suchen und Ersetzen in Strings ............................................................ 476

18.8 Übungen ............................................................................................... 478

18.9 Übungen ............................................................................................... 480

18.10 Lösung .................................................................................................. 482

18.11 Lösung (Fortsetzung) ............................................................................ 484

19.1 Typumwandlungen in Klassenhierarchien ............................................. 486

19.2 Dynamischer Cast (1) ........................................................................... 488

19.3 Dynamischer Cast (2) ........................................................................... 490

19.4 Statischer Cast ...................................................................................... 492

19.5 reinterpret-Cast, const-Cast ................................................................. 494

19.6 Typinformationen ................................................................................. 496

19.7 Übungen ............................................................................................... 498

19.8 Lösung .................................................................................................. 500

20.1 Die I/O-Klassenhierarchie ..................................................................... 504

20.2 Die Klasse ios ....................................................................................... 506

20.3 Die Klasse ostream ............................................................................... 508

20.4 Die Klasse istream ................................................................................ 510

20.5 Unformatierte Eingabe ......................................................................... 512

20.6 Unformatierte Ausgabe ........................................................................ 514

20.7 Status eines Streams ............................................................................ 516

20.8 Status abfragen und ändern ................................................................. 518

20.9 Format-Flags ........................................................................................ 520

20.10 Formatierung ganzer Zahlen ................................................................. 522

20.11 Formatierung von Gleitpunktzahlen ..................................................... 524

20.12 Ausgabe in Felder ................................................................................. 526

18 Die Standard-Klasse string 463

19 Type-Casts und Typinformationen 485

20 Streams für die Ein- und Ausgabe 503

Inhalt

Page 11: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

20.13 Weitere Manipulatoren ......................................................................... 528

20.14 Selbstdefinierte Manipulatoren ............................................................ 530

20.15 Selbstdefinierte Manipulatoren mit Parametern ................................... 532

20.16 Übungen ............................................................................................... 534

20.17 Lösung .................................................................................................. 536

21.1 Die File-Stream-Klassen ........................................................................ 542

21.2 Sequenzieller Dateizugriff ..................................................................... 544

21.3 Wahlfreier Dateizugriff .......................................................................... 546

21.4 Die String-Stream-Klassen .................................................................... 548

21.5 Lesen und Schreiben von String-Streams .............................................. 550

21.6 Übungen ............................................................................................... 552

21.7 Übungen ............................................................................................... 554

21.8 Lösungen .............................................................................................. 556

21.9 Lösungen (Fortsetzung) ........................................................................ 558

21.10 Lösungen (Fortsetzung) ........................................................................ 560

21.11 Lösungen (Fortsetzung) ........................................................................ 562

21.12 Lösungen (Fortsetzung) ........................................................................ 564

21.13 Lösungen (Fortsetzung) ........................................................................ 566

21.14 Lösungen (Fortsetzung) ........................................................................ 568

C-Tutorial ............................................................................................... 571

Die String-Bibliothek ............................................................................. 611

I/O-Stream-Bibliothek ........................................................................... 627

Die Container-Bibliothek ....................................................................... 655

Die Algorithmen-Bibliothek................................................................... 699

Die numerische Bibliothek..................................................................... 717

Komplexe Zahlen ................................................................................... 719

Vektoren ................................................................................................ 729

Numerische Grenzwerte......................................................................... 747

Operatorenübersicht und Vorrangtabelle .............................................. 755

Schlüsselwörter in C++ .......................................................................... 759

Literatur ................................................................................................. 761

Die CD zum Buch................................................................................... 763

21 Datei- und String-Streams 541

Anhang 569

Index 767

Inhalt 15

Page 12: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Über dieses Buch

Dieses Buch wendet sich an Leser mit Grundkenntnissen in C oder C++, die die objektorien-tierte Programmierung mit C++ kennenlernen oder vertiefen möchten.

Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American NationalStandards Institute, der 1998 als internationaler Standard (ISO/IEC 14882) verabschiedetwurde. Die Darstellung der Sprache C++ ist damit weitgehend plattformunabhängig. DerANSI-Standard wird von allen gängigen C++-Compilern unterstützt.

Die Kapitel im Buch sind so angeordnet, dass der Leser von grundlegenden Konzepten derobjektorientierten Programmierung bis hin zur professionellen Software-Entwicklung geführtwird. Hierbei werden alle objektorientierten Sprachelemente von C++ einschließlich der C-Spracherweiterungen umfassend behandelt.

Jede Doppelseite ist wie folgt gegliedert: Auf der rechten Seite sind Konzepte und Sprachele-mente beschrieben, welche durch Grafiken und Programmbeispiele auf der linken Seite illu-striert werden. Die Programmbeispiele sind so ausgewählt, dass sie eine typische Anwendungfür das jeweilige Sprachelement zeigen. Darüber hinaus werden zahlreiche Datenstrukturenund Algorithmen implementiert, die den Leser mit einem breiten Anwendungsspektrum ver-traut machen.

Um die objektorientierte Programmierung effektiv einsetzen zu können, ist viel eigene Erfah-rung durch selbständiges Entwickeln von Programmen notwendig. Am Ende jedes Kapitelssind deshalb Übungen formuliert, zu denen auf den folgenden Seiten Musterlösungen ange-geben sind. Der Leser kann damit seine erreichten Fähigkeiten testen und das Verständnis ver-tiefen.

Der Anhang beginnt mit einem C-Tutorial. Es ermöglicht dem Leser, seine C-Kenntnisse auf-zufrischen und beim Arbeiten mit C++ schnell das eine oder andere Detail der Sprache Cnachzuschlagen. Außerdem sind im Anhang die wichtigsten Klassen der Standard Template Li-brary (STL) sowie nützliche Tabellen zusammengestellt. Das Buch soll damit auch den geübtenC++-Programmierer begleiten, der ein gut strukturiertes und verständliches Nachschlagewerkzur Hand haben will.

Auf der CD zum Buch befinden sich alle Musterlösungen zu den Übungen. Damit der Leserseine Programme direkt testen kann, sind außerdem der Compiler GNU C++ für Windowsund der Borland C++ Compiler beigefügt. Hinweise zur Installation der Compiler befindensich im Anhang »Die CD zum Buch«.

Wir bedanken uns bei allen, die bei der Entstehung des Buches mitgewirkt haben, auch beiunseren Kindern, die uns oft genug in Ruhe gelassen haben, und wünschen Ihnen, lieber Le-ser: Viel Spaß bei der objektorientierten Programmierung mit C++!

Ulla Kirch-Prinz Peter Prinz

Über dieses Buch 17

Page 13: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Kapitel 1: OOP-Paradigma und C++

Dieses Kapitel beschreibt zunächst die allgemeinen Konzepte der objekt-orientierten Programmierung. Anschließend werden die charakteristischenEigenschaften von C++ und seine historische Entwicklung vorgestellt.

17

18

19

20

21

Page 14: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

20

1.1 Konzepte der OOP

Klassisches prozedurales Konzept

Objektorientiertes Konzept

Daten Daten

Funktion Funktion Funktion

Objekt 1 Objekt 2

Eigenschaften

__________

Methoden

Eigenschaften

__________

Methoden

C++ – Alles zur objektorientierten Programmierung

Page 15: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

OOP

Die objektorientierte Programmierung (kurz OOP) ist eine grundsätzlich neue Art der Soft-ware-Entwicklung. Sie ist geeignet, auf hohem Abstraktionsniveau die Komplexität großerProjekte zu bewältigen.

Die OOP stellt die Objekte in den Mittelpunkt, also die Dinge, um die es bei der jeweiligenProblemstellung geht. Beispielsweise arbeitet ein Programm zur Lagerverwaltung mit Artikeln,Bestellungen, Auslieferungen, Rechnungen usw. Ein Objekt, das im Programm einen Artikelrepräsentiert, besitzt dann alle Eigenschaften und Fähigkeiten, die für die Handhabung von Ar-tikeln im Programm wichtig sind.

Für die traditionelle, prozedurale Programmierung ist es charakteristisch, dass Daten undFunktionen, die diese Daten verarbeiten, keine Einheit bilden. Daraus resultiert eine größereFehleranfälligkeit, z.B. durch fehlerhafte Zugriffe auf die Daten oder Verwendung nichtinitia-lisierter Daten. Hinzu kommt ein hoher Wartungsaufwand, etwa wenn die Daten an neue An-forderungen angepaßt werden müssen.

Dagegen bilden die Objekte in der OOP eine Einheit aus Daten (= Eigenschaften) und Funk-tionen (= Methoden, Fähigkeiten). Für die Software-Qualität ergeben sich daraus entschei-dende Vorteile:

� Höhere Zuverlässigkeit

� Geringerer Wartungsaufwand

� Bessere Wiederverwendbarkeit

Merkmale der OOP

Eine objektorientierte Programmiersprache ist dadurch gekennzeichnet, dass sie Sprachele-mente zur Unterstützung der folgenden OOP-Paradigmen besitzt:

Datenabstraktion

Es können abstrakte Datentypen (Klassen) definiert werden, welche die Eigenschaften und Fä-higkeiten von Objekten beschreiben.

Datenkapselung

Elemente eines Objekts können vor unkontrolliertem Zugriff von außen geschützt werden.Für die Kommunikation mit der Außenwelt, d.h. mit anderen Objekten, besitzt jedes Objekteine »öffentliche Schnittstelle«.

Vererbung

Neue Objekte lassen sich aus schon vorhandenen Objekten ableiten. Sie »erben« die vorhan-denen Eigenschaften und Fähigkeiten, die ergänzt und verändert werden können.

Polymorphie

Die Vererbung erlaubt das Arbeiten mit einer ganzen Familie gleichartiger Objekte. »Polymor-phie« (griech. Vielgestaltigkeit) bezeichnet hier die Möglichkeit, dass der Aufruf einer Me-thode zur Laufzeit verschiedene Wirkungen haben kann, je nach dem genauen Typ des Ob-jekts.

OOP-Paradigma und C++ 21

Page 16: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

22

1.2 Datenabstraktion

Klassen und Objekte

reale Welt

Flugzeuge

Datenabstraktion

KlasseEigenschaften:

BaujahrReichweiteStatus. . .

________________

Methoden:starten, fliegen,landen, . . .

Instantiierung

Objekte

Flugzeug 1

Baujahr = 2001 Reichweite = 7000 Status = parken . . .__________________

Methoden

Flugzeug 2

Baujahr = 1998 Reichweite = 12000 Status = landen . . .__________________

Methoden

. . .

C++ – Alles zur objektorientierten Programmierung

Page 17: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Abstraktion

Eine Möglichkeit, um komplexe Sachverhalte zu handhaben, ist die Abstraktion. Eigenschaf-ten und Vorgänge werden auf das Wesentliche reduziert und mit einem Oberbegriff versehen.Ein Flugzeug ist ein Beispiel für eine in verschiedener Hinsicht durchgeführte Abstraktion:

� Ein Flugzeug ist die Zusammenfassung verschiedener Einzelteile wie Motor, Tragflächen,Räder usw. Darüber hinaus besitzt jedes Flugzeug Eigenschaften wie Reichweite, Höchst-geschwindigkeit und Transportkapazität. Auch der aktuelle Status, wie z.B. »Das Flugzeugist geparkt«, gehört zu den Eigenschaften.

� Die Fähigkeiten eines Flugzeugs bestehen natürlich in erster Linie aus Starten, Fliegen undLanden. Außerdem muss ein Flugzeug getankt, beladen, entladen und gewartet werden.

� Ein Flugzeug ist auch der Oberbegriff für verschiedene Flugzeugtypen wie Segelflugzeug,Motorflugzeug, Düsenjäger, Transportflugzeug, Passagierflugzeug usw.

Sofern die Details eines Flugzeugs bzw. die Unterschiede zwischen verschiedenen Flugzeug-typen nicht interessieren, wird einfach der abstrakte Begriff »Flugzeug« verwendet. Damitkönnen die für ein Flugzeug typischen Aktionen in den Vordergrund rücken: Ein Flugzeugkann gebaut, gewartet oder demontiert werden. Ein Flugzeug startet, fliegt, z.B. von Mün-chen nach Köln, oder landet.

Klassen und Objekte

Eine objektorientierte Programmiersprache unterstützt die Datenabstraktion, indem sie Sprach-elemente zur Definition von Klassen zur Verfügung stellt. Klassen beschreiben die Eigenschaftenvon Objekten und legen mit den Methoden fest, welche Aktionen die Objekte ausführen kön-nen. Ein konkretes Objekt wird nach dem »Muster« der Klasse erzeugt und bildet eine Instanzder Klasse.

Das nebenstehende Beispiel zeigt dies anhand des Begriffs »Flugzeug«: Die Klasse Flugzeugbeschreibt die verschiedenen Aspekte eines Flugzeugs, welche im Programm von Interessesind. Immer dann, wenn im Programm ein konkretes Flugzeug benötigt wird, wird ein Objektnach dem Muster der Klasse Flugzeug instantiiert.

Klassen können auch für abstrakte Objekte und Vorgänge definiert werden, wie z.B. »Auf-trag«, »Qualität« oder »Volleyballspiel«.

In C++ sind Klassen spezielle, strukturierte Datentypen, die neben Daten (= Eigenschaften)auch Funktionen (= Methoden) enthalten, z.B. zur Manipulation dieser Daten. Die zu einerKlasse gehörenden Funktionen heißen Elementfunktionen. Ein Objekt ist nichts anderes alseine Variable vom Typ einer bestimmten Klasse.

OOP-Paradigma und C++ 23

Page 18: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

24

1.3 Datenkapselung

Kontrollierter Zugriff auf die Daten

�����������

���� � ���� �

���� � ���� �

C++ – Alles zur objektorientierten Programmierung

Page 19: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Datenkapselung

Ein Anwendungsprogramm arbeitet mit Objekten, indem es die Methoden aus der öffentli-chen Schnittstelle der entsprechenden Klasse aufruft.

Die interne Darstellung der Daten braucht das Anwendungsprogramm nicht zu kennen. BeiBedarf kann die interne Darstellung der Daten auch geändert werden, ohne dass die Verwen-dung der Klasse davon betroffen ist, vorausgesetzt, die Schnittstellen der Methoden bleibendieselben.

Beispiel: Für Objekte einer Klasse, die ein Datum enthalten, soll der Wertebereich des Da-tums vergrößert werden. Die notwendige Änderung der internen Darstellung unddie entsprechenden Anpassungen der Methoden kann so vorgenommen werden,dass sie nur die Klasse selbst betreffen.

Der Zugriff auf die Daten eines Objekts erfolgt im allgemeinen nicht direkt, sondern in kon-trollierter Weise über die Methoden. Da eine Klasse auch die Erzeugung und die Zerstörungeines Objekts festlegt, kann so folgendes garantiert werden:

� Nach dem Erzeugen eines Objekts sind die Daten stets mit vernünftigen Anfangswertenversehen.

� Fehlerhafte oder unzulässige Zugriffe werden frühzeitig durch die Methoden abgefangen.

� Sofern ein Objekt im weiteren Programmverlauf nicht mehr benötigt wird, kann es in ge-ordneter Weise »zerstört« werden. Beispielsweise kann es nötig sein, geöffnete Dateien zuschließen, dynamisch reservierten Speicher wieder freizugeben oder Zeiger auf einen Pseu-dowert zurückzusetzen.

Ein Objekt verwaltet sich also mit Hilfe seiner Methoden selbst und kapselt sein »Innenleben«von der Außenwelt ab. Dadurch ist jederzeit die Integrität der Daten sichergestellt.

Zur Unterstützung der Datenkapselung bieten objektorientierte ProgrammiersprachenSprachelemente, die den Zugriff auf Daten und Methoden einschränken bzw. sperren können.Hierzu gehört die Möglichkeit, die Elemente einer Klasse als private oder public zu deklarieren:

� Auf private-Elemente können nur die Methoden der Klasse zugreifen. Sie sind damit vordem direkten, unkontrollierten Zugriff von außen geschützt.

� Die public-Elemente bilden die öffentliche Schnittstelle. Auf sie kann uneingeschränkt zu-gegriffen werden.

OOP-Paradigma und C++ 25

Page 20: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

26

1.4 Vererbung

Basisklasse und abgeleitete Klassen

����������� Flugzeug

������� ���

�������� ��� ���

��������

��� � ������ ���

������������������ �� ��

��������

��� ����������

���� � � ����

������������������ �� ��

��������

� ���� ��������

�������� ���������

���������� ������Transportflugzeug

���������� ������Passagierflugzeug

C++ – Alles zur objektorientierten Programmierung

Page 21: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Vererbung

Aus einer bereits existierenden Klasse kann eine neue Klasse gebildet werden, die weitereEigenschaften und Fähigkeiten besitzt. Diese abgeleitete Klasse »erbt« dabei die Daten undMethoden der sogenannten Basisklasse.

Benötigt beispielsweise eine Anwendung, die mit einer Klasse Flugzeug arbeitet, die Unter-scheidung von Transport- und Passagierflugzeugen, so wird man entsprechende Klassen vonder Basisklasse Flugzeug ableiten. In den Programmteilen, wo es auf diese Unterscheidungnicht ankommt, können Transport- oder Passagierflugzeuge wie normale Flugzeuge behandeltwerden.

Objekte von abgeleiteten Klassen sind stets »spezielle Objekte« vom Typ der Basisklasse. DieVererbung ermöglicht es so, hierarchische Beziehungen zwischen Objekten auszudrücken.

Durch Vererbung werden ganze »Familien« von Klassen gebildet. Man spricht auch von»Klassenhierarchien«. C++ besitzt sehr effiziente Mechanismen zur Bildung von Klassenhierar-chien.

Wiederverwendbarkeit

Die Vererbung ist ein wichtiges Mittel, um bereits entwickelten Programmcode wiederver-wendbar zu machen.

Bei der Bildung abgeleiteter Klassen muss nur die öffentliche Schnittstelle der Basisklasse be-kannt sein. Die interne Darstellung von Daten sowie die Definition von Elementfunktionenbraucht der Programmierer nicht zu kennen. Vorhandene Klassen können daher als leicht er-weiterbare »Bausteine« in einem neuen Programm eingesetzt werden. Zahlreiche Klassen-bibliotheken unterstützen dieses Konzept.

Polymorphie

In der OOP bezeichnet Polymorphie (griech. Vielgestaltigkeit) die Möglichkeit, dass der Aufrufeiner Methode zur Laufzeit verschiedene Wirkungen haben kann. Dies hat folgenden Hinter-grund:

Eine abgeleitete Klasse muss eine Methode der Basisklasse nicht unverändert übernehmen.Für die Objekte der abgeleiteten Klasse kann die Methode neu definiert werden: Sie wird denneuen Eigenschaften der Klasse angepaßt. Innerhalb einer Klassenhierarchie kann daher derName einer Methode für verschiedene Implementierungen stehen.

Beispielsweise wird es in einer Klassenhierarchie von geometrischen Figuren immer wiedereine Methode geben, die eine konkrete geometrische Figur zeichnet, z.B. eine Methodedraw(). Wird nun für ein Objekt draw() aufgerufen, so entscheidet der Typ des Objekts,welche konkrete Methode zur Ausführung kommt.

Bei der Erstellung des Programms ist der genaue Typ des Objekts oft noch unbekannt. Dannwird erst zur Laufzeit entschieden, welche Methode zur Ausführung kommt.

OOP-Paradigma und C++ 27

Page 22: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

28

1.5 Entwicklung von C++

C

Algol, Ada, ...(Erweiterungen)

Smalltalk, Simula,Eiffel (OOP-Unterstützung)

1980

C mit Klassen

1983

C++

1989

Bildung desX3J16-ANSI-

Kommitees

1990

AT&TC++ Release 2.0

1996

Draft ProposalX3J16/96-0225

1991

AT&TC++ Release 3.0

1998

ISO-StandardISO/IEC 14882

C++ – Alles zur objektorientierten Programmierung

Page 23: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Ursprung

C++ wurde von Bjarne Stroustrup in den Bell-Laboratorien (Murray Hill, USA) entwickelt, umSimulationsprojekte mit minimalem Speicherplatz und Zeitbedarf zu realisieren. Frühe Versio-nen der Sprache, die zunächst als »C mit Klassen« bezeichnet wurde, gibt es seit 1980. DerName C++ wurde 1983 von Rick Mascitti geprägt. Er weist darauf hin, dass die Programmier-sprache C++ evolutionär aus der Programmiersprache C entstanden ist: ++ ist der Inkrement-operator von C.

Einflüsse

C wurde wegen ihrer Effizienz und Portabilität als Grundlage von C++ gewählt. Bei der Wei-terentwicklung von C++ wurde stets auf die Kompatibilität zu C geachtet. Somit bleibt dieumfangreiche, unter C entwickelte Software auch in C++-Programmen einsatzfähig. Dazu ge-hören beispielsweise Tools und Bibliotheken für Grafik-Systeme oder Datenbankanwendun-gen.

Bei der Realisierung objektorientierter Konzepte hatte die Programmiersprache SIMULA67maßgeblichen Einfluß, insbesondere bei der Bildung von Klassen, der Vererbung und demEntwurf virtueller Funktionen. Das Überladen von Operatoren und die Möglichkeit, Deklara-tionen im Programmtext frei plazieren zu können, wurde der Programmiersprache ALGOL68entlehnt. Die Programmiersprachen Ada und Clu haben die Entwicklung von Templates unddie Ausnahmebehandlung beeinflußt.

Schließlich gehen viele Entwicklungen aus den Jahren 1987 bis 1991 auf die direkten Erfah-rungen und Probleme von C++-Programmierern zurück. Hierzu gehören beispielsweise dieMehrfachvererbung, das Konzept der rein virtuellen Funktionen und die Nutzung gemeinsa-mer Speicherbereiche für Objekte.

Standardisierung

Parallel zu diesen Entwicklungen unterstützte die Firma AT&T frühzeitig die Etablierung einesC++-Standards. Hierbei ging es darum, dass möglichst viele Compiler-Bauer und Software-Entwickler sich auf eine einheitliche Sprachbeschreibung einigten, um die Bildung von Dia-lekten und »Sprachverwirrungen« zu vermeiden.

Im Jahr 1989 konnte auf Initiative von Hewlett-Packard ein ANSI-Kommitee (American Na-tional Standards Institute) gebildet werden, das verschiedene Entwürfe (engl. Draft ProposalX3J16) für einen Standard geschaffen hat. Dieser Standard wurde 1998 als ISO-Standard (In-ternational Standards Organization, ISO/IEC 14882) verabschiedet.

OOP-Paradigma und C++ 29

Page 24: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

30

1.6 Eigenschaften von C++

Die Hybrid-Sprache C++

��� ������������� ���� ����

��������������� ���� ����� ��� ��� ���� ����� ��������� � � �

���� ��� ��!����

"���� #�� $������ %� � ��� ���&�� ��� � � �

���� � � ����&��� � ���� �� �� '����� ��������� ���� ��������� �� � � �

�� ��� �� ���

C++ – Alles zur objektorientierten Programmierung

Page 25: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

C als Teilmenge von C++

C++ ist keine rein objektorientierte Sprache, wie z.B. Smalltalk oder Eiffel. Bei letzteren wur-den die objektorientierten Paradigmen ohne Wenn und Aber realisiert, wobei allerdings lang-sameres Laufzeitverhalten in Kauf genommen wurde. C++ ist eine Hybrid (griech. »Misch«)-Sprache: Sie enthält die Programmiersprache C als Teilmenge. Damit hat man zunächst in C++alle Möglichkeiten, die auch C bietet, wie z.B.:

� maschinennahes Programmieren

� Entwickeln von portablen Programmen

� strukturiertes und modulares Programmieren

Darüber hinaus ergeben sich weitere entscheidende Vorteile:

� Die umfangreiche Software, die in C entwickelt worden ist, kann unverändert genutzt wer-den.

� C-Programmierer brauchen keine komplett neue Sprache zu lernen. Sie haben sich ledig-lich mit den Erweiterungen von C und den Neuerungen bzgl. der objektorientierten Pro-grammierung auseinanderzusetzen.

Erweiterung von C

Die sprachlichen Möglichkeiten von C wurden innerhalb von C++ erweitert, indem Sprachele-mente zur Bildung von

� Inline-Funktionen

� Default-Argumenten

� Referenztypen

� Überladung von Funktionen und Operatoren

� Templates (Schablonen für die Definition von Funktionen und Klassen)

� Exception-Handling (Ausnahmebehandlung)

zur Verfügung gestellt wurden. Auch wenn diese Sprachelemente noch keinen Bezug zur OOPhaben, sind sie doch wesentlich für die effiziente Realisierung von C++ als OOP-Sprache.

OOP-Unterstützung

C++ unterstützt die Konzepte der objektorientierten Programmierung durch die Möglichkei-ten:

� Klassen zu bilden

� den Zugriff auf Daten und Elementfunktionen durch public-, private- oder protec-ted-Spezifikationen zu steuern

� Klassen (auch mehrfach) zu vererben

� Elementfunktionen als virtuell zu deklarieren und so polymorphe Klassen zu bilden

OOP-Paradigma und C++ 31

Page 26: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

32

1.7 Entwicklung eines C++-Programms

Der Weg zum ausführbaren Programm

Editor

Quelldatei Header-Dateien Standard-Header-Dateien

Compiler

Objektdatei

evtl. weitereObjektdateien

Linker Standard-Bibliothek

evtl. weitereBibliotheken

ausf hrba reDatei

C++ – Alles zur objektorientierten Programmierung

Page 27: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Zur Erstellung und Übersetzung eines C++-Programms sind grundsätzlich die gleichen Schrittewie in C notwendig:

1. Das Programm wird mit einem Editor erstellt.

2. Das Programm wird kompiliert, d.h. in die Maschinensprache des Rechners übersetzt.

3. Der Linker erzeugt schließlich die ausführbare Datei.

Editor

Mit einem Editor werden die Textdateien erstellt, die den C++-Code enthalten. Dabei sindzwei Arten von Dateien zu unterscheiden:

� QuelldateienQuelldateien, auch Source-Dateien genannt, enthalten die Definitionen von globalen Va-riablen und Funktionen.

Jedes C++-Programm besteht aus mindestens einer Quelldatei.

� Header-DateienHeader-Dateien, auch Include-Dateien genannt, verwalten zentral die Informationen, diein verschiedenen Quelldateien gebraucht werden. Dazu gehören:

� Typdefinitionen, z.B. Klassendefinitionen

� Deklarationen von globalen Variablen und Funktionen

� Definition von Makros und Inline-Funktionen

Bei der Benennung der Dateien muss die richtige Endung (engl. Extension) verwendet wer-den. Diese variieren jedoch von Compiler zu Compiler: Für Quelldateien sind die gebräuch-lichsten Endungen .cpp und .cc. Die Namen von Header-Dateien enden entweder wie in Cmit .h oder sie haben keine Endung. Aber auch Endungen wie .hpp können vorkommen. DieHeader-Dateien der C-Standard-Bibliothek können natürlich weiter benutzt werden. Mehrdazu in Kapitel 13, »Namensbereiche«.

Compiler

Eine Übersetzungseinheit besteht aus einer Quelldatei und den inkludierten Header-Dateien.Der Compiler erzeugt aus jeder Übersetzungseinheit eine Objektdatei (auch Modul genannt),die den Maschinen-Code enthält.

Neben den Compilern, die direkt den Maschinen-Code erzeugen, gibt es auch C++- nachC-Übersetzungsprogramme, sogenannte »C-Front-Compiler«. Diese übersetzen ein C++-Programm in ein C-Programm. Erst anschließend wird die Objektdatei mit einem Standard-C-Compiler erzeugt.

Linker

Der Linker bindet die Objektdateien zu einer ausführbaren Datei. Diese enthält neben denselbsterzeugten Objektdateien auch den Startup-Code und die Module mit den verwendetenFunktionen und Klassen der Standardbibliothek.

OOP-Paradigma und C++ 33

Page 28: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

34

1.8 Übungen

Definition der Struktur tm in time.h

Beispielaufruf für time( ) und localtime( )

struct tm{ int tm_sec; // 0 – 59(60) int tm_min; // 0 - 59 int tm_hour; // 0 - 23

int tm_mday; // Tag im Monat: 1 - 31 int tm_mon; // Monat: 0 - 11 int tm_year; // Jahre seit 1900

int tm_wday; // Wochentag: 0 - 6 int tm_yday; // Tag im Jahr: 0 - 365

int tm_isdst; // Flag für Sommerzeit};

#include <time.h>

struct tm *zeit; time_t sec; . . . time(&sec); zeit = localtime(&sec);

cout << "Heute ist der " << zeit->tm_yday +1 << ". Tag des Jahres.\n"; . . .

C++ – Alles zur objektorientierten Programmierung

Page 29: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

1. Aufgabe

� Deklarieren Sie eine Struktur Datum zur Darstellung eines Datums mit ganzzahligen Kom-ponenten für Tag, Monat und Jahr.

� Schreiben Sie eine Funktion showDate(), die ein als Argument übergebenes Datum imFormat tag.monat.jahr ausgibt.

� Schreiben Sie eine Funktion getDate(), die ein Datum im Dialog einliest und eine Be-reichsüberprüfung vornimmt. Bei einem gültigen Datum wird dieses in die Strukturvariablezurückgeschrieben, deren Adresse als Argument übergeben wird.Return-Wert: 1 bei gültiger Eingabe, andernfalls 0.

� Erstellen Sie eine Funktion isLeapYear(), die überprüft, ob eine als Argument überge-bene Jahreszahl ein Schaltjahr ist. Trifft dies zu, so liefert die Funktion 1 zurück, andernfalls 0.

� Testen Sie die Funktionen mit einem geeigneten Hauptprogramm.

2. Aufgabe

� Das Programm aus der 1. Aufgabe soll modular aufgebaut werden. Stellen Sie zu diesemZweck die Definition der Struktur Datum und die Prototypen der Funktionen in die Hea-der-Datei datum.h. Die Implementierung der Funktionen ist in eine separate Quelldatei datum.cpp zu kopie-ren. Das Hauptprogramm, das mit der Struktur Datum und den zugehörigen Funktionenarbeitet, steht ebenfalls in einer eigenen Quelldatei.

� Ergänzen Sie das Programm um eine Funktion actDate(), die das aktuelle Datum in dieStrukturvariable zurückschreibt, deren Adresse als Argument übergeben wird.Return-Wert: keiner.

Die Funktion time() liefert die Systemzeit in Form von Anzahl Sekunden und schreibt diesein die durch secPtr adressierte Variable. Dieser Wert kann der Funktion localtime()übergeben werden, welche die Anzahl der Sekunden in das lokale Datum vom Typ tm um-wandelt und einen Zeiger auf diese Struktur zurückliefert. Die Definition der Struktur tm istnebenstehend angegeben. Der Datentyp time_t ist in time.h als long definiert.

� Testen Sie das Programm, indem Sie auch die Funktion actDate() aufrufen und das ak-tuelle Datum anzeigen lassen.

Hinweis Für die Bereichsüberprüfung definieren Sie einen Vektor, der die Anzahl derTage für jeden Monat speichert (z.B. 31 für Januar usw.). Um festzustellen, ob ein Jahrein Schaltjahr ist, rufen Sie die Funktion isLeapYear() auf.

Hinweis Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist. Ausgenommen sind dieJahre, die durch 100 teilbar und kein Vielfaches von 400 sind.

Hinweis Verwenden Sie die in time.h deklarierten Funktionentime_t time(time_t *secPtr);struct tm *localtime(const time_t *secPtr);

OOP-Paradigma und C++ 35

Page 30: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

36

1.9 Lösungen

Zur 1. und 2. Aufgabe

/************************************************************* Datei: datum.h Zweck: Definition der Struktur Datum und Deklaration zugehoeriger Funktionen. *************************************************************/

#ifndef _DATUM_ /* Nachfolgender Block nur, falls */ /* datum.h noch nicht inkludiert */#define _DATUM_

struct Datum { int tag, monat, jahr; };

/* Prototypen: */void showDate(Datum dat);int getDate(Datum *p);void actDate(Datum *p);int isLeapYear(int year);

#endif

/************************************************************* Datei: datum.cpp Zweck: Definition der Funktionen fuer die Struktur Datum *************************************************************/

#include <stdio.h>#include <time.h>#include "datum.h"

/* ----------------------------------------------------------- showDate(): Datum anzeigen */void showDate(Datum dat){ printf("%d.%d.%d", dat.tag, dat.monat, dat.jahr);}

C++ – Alles zur objektorientierten Programmierung

Page 31: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/* ----------------------------------------------------------- getDate(): Datum im Dialog einlesen Return-Wert: 1 (true), falls Eingabe ok 0 (false) sonst. */int getDate(Datum *p){ static int tageImMonat[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int tag=0, monat=0, jahr=0;

printf("\nTag: "); scanf("%d", &tag); if(tag < 1 || tag > 31) return 0;

printf("Monat: "); scanf("%d", &monat); if(monat < 1 || monat > 12 || tag > tageImMonat[monat]) return 0;

printf("Jahr: "); scanf("%d", &jahr); if(jahr < 1 || (!isLeapYear(jahr) && tag == 29) ) return 0;

p->tag = tag; p->monat = monat; p->jahr = jahr;

return 1;}

/* ----------------------------------------------------------- actDate(): das aktuelle Datum holen */void actDate(Datum *p){ struct tm *systime; time_t sec;

time(&sec); systime = localtime(&sec);

p->tag = systime->tm_mday; p->monat = systime->tm_mon + 1; p->jahr = systime->tm_year + 1900;}

OOP-Paradigma und C++ 37

Page 32: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

38

1.10 Lösungen (Fortsetzung)/* ----------------------------------------------------------- isLeapYear(): stellt fest, ob ein Schaltjahr vorliegt. Return-Wert: 1 (true), falls ja 0 (false) falls nein */int isLeapYear(int year){ return (year%4 == 0 && year%100 != 0) || year%400 == 0;}

/************************************************************* Datei: datum_t.cpp Zweck: Mit Strukturen vom Typ Datum arbeiten und modulare Programmiertechnik einsetzen. Module: datum_t.cpp datum.cpp *************************************************************/

#include <stdio.h>#include "datum.h" /* Struktur Datum und */ /* Prototypen von Funktionen */ int main(){ struct Datum birthday = { 19, 5, 1986 }; printf("\nMit der Struktur Datum arbeiten\n");

printf("\nEin Geburtstag: "); showDate( birthday);

printf("\n\nWann haben Sie Geburtstag?\n"); if (!getDate( &birthday)) printf("Fehler bei der Eingabe!\n"); else { printf("\nIhr Geburtstag: "); showDate( birthday); } actDate( &birthday); printf("\n\nDas heutige Datum: "); showDate( birthday); printf("\n\n");

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 33: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Kapitel 2: Erste Schritte mit C++

Dieses Kapitel beschreibt Erweiterungen der Programmiersprache C, wie:

� die freie Plazierungsmöglichkeit von Deklarationen

� Inline-Funktionen

� Aufzählungen

Außerdem werden die neuen Streams cin, cout und cerr kurz vorgestellt,damit sie von Beginn an in Beispielprogrammen und Übungen eingesetzt wer-den können.

17

18

19

20

21

Page 34: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

40

2.1 Kommentare

Beispielprogramm

/************************************************************** Ein Programm mit vielen Kommentaren, das die Verwendung ** von Strukturen zeigt. ** Strukturnamen sind in C++ Typnamen! *************************************************************/

#include <stdio.h> // Fuer den Prototyp von printf()

struct buch // Definition der Struktur buch{

char autor[32];char titel[32];float preis;

}; // Semikolon nicht vergessen.

void display( buch *buchptr); // Prototyp von display()

int main() // Mit Strukturvariablen vom Typ buch arbeiten.{

buch roman = { "Al Capone", "Das grosse Spiel", 39.90F},gedichte = { "Winter, Eva", "Traumreise", 79.80F};

display( &roman); // Die Adresse der Variablendisplay( &gedichte); // uebergeben.

printf("Gesamtpreis: %.2f\n",roman.preis + gedichte.preis);

return 0;}

// -----------------------------------------------------------// Funktion: display()// Argument: Zeiger auf eine Struktur vom Typ buch// Return-Wert: keiner

void display( buch *buchptr){

printf("\n""Autor: %s\n""Titel: %s\n""Verkaufspreis: %6.2f\n\n",buchptr->autor, buchptr->titel, buchptr->preis);

}

C++ – Alles zur objektorientierten Programmierung

Page 35: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Kommentare

C++ kennt zwei Formen von Kommentaren:

� Den traditionellen C-Kommentar: /* Ein Kommentar */

� Den Einzeilen-Kommentar: // Ein Kommentar

Der neue Einzeilen-Kommentar beginnt mit // (zwei Schrägstriche). Es werden alle weiterenZeichen bis zum Zeilenende ignoriert.

Der Einzeilen-Kommentar eignet sich daher besonders für die kurze Kommentierung einzel-ner Programmzeilen.

++zaehler; // Index erhöhen

Jede Form von Kommentar kann auch dazu verwendet werden, die jeweils andere Form aus-zukommentieren:

/*++zaehler; // zaehler = zaehler + 1;*/

oder umgekehrt:

// ++zaehler; /* zaehler = zaehler + 1; */

Zum Beispielprogramm

Das nebenstehende Beispielprogramm demonstriert die großzügige Verwendung von Kom-mentaren. Der Quelltext wird so leichter nachvollziehbar, insbesondere auch durch die opti-sche Gliederung mit Hilfe von Kommentaren.

Im Programm wird eine Struktur buch definiert und gezeigt, wie mit Variablen dieses Typs ge-arbeitet wird.

Im Unterschied zu C ist der Strukturname auch bereits der Typname. Das Schlüsselwortstruct wird nur in der Strukturdefinition benötigt und kann in nachfolgenden Deklarationenweggelassen werden:

struct buch roman; /* Syntax von C */buch roman; // erweiterte Syntax von C++

In C++ ist weiterhin die »alte« C-Syntax zulässig. Das hier für struct-Typen Gesagte gilt ana-log auch für union- und enum-Typen.

Erste Schritte mit C++ 41

Page 36: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

42

2.2 Klassen für die Standard-Ein- und Ausgabe

Ein- und Ausgabe-Streams

cout

cerr

clog

cincin>>zeichen;

Tastatur

char zeichen;

clog<<"Test2\n";

cerr<<"Test1\n";

cout<<"Hallo!\n";

!

BildschirmProgramm

C++ – Alles zur objektorientierten Programmierung

Page 37: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

I/O-Streams

Zusätzlich zum Ein- und Ausgabesystem von C verfügt C++ über neue Streams auf der Basisvon Klassen. Der Begriff Stream (dt. Strom) spiegelt die Situation wider, dass Zeichenfolgenbei der Ein- und Ausgabe als Datenstrom behandelt werden.

Ein wesentlicher Vorteil der neuen Streams ist die Typsicherheit:

Bei den klassischen C-Funktionen, wie zum Beispiel printf(), kann der Compiler nicht im-mer den richtigen Aufruf überprüfen. Ein falsches Formatelement oder der falsche Typ einesArguments führen unweigerlich zu einem Laufzeitfehler.

Beispiel: double x = 1.5;printf("%d", x); // Fehler!

// Falsches Formatelement.

Derartige Fehler sind bei Verwendung der neuen Streams ausgeschlossen: Der Compiler ent-scheidet anhand des Argumenttyps, welche Eingabe- bzw. Ausgabe-Routine aufzurufen ist.

cin, cout, cerr, clog

Die Klassen für die neuen Streams sind in der Header-Datei iostream deklariert, und es gibtfolgende Objekte:

cin Standard-Eingabe

cout Standard-Ausgabe

cerr Standard-Fehlerausgabe

clog Standard-Fehlerausgabe

Diese Streams basieren auf den C-Streams stdin, stdout und stderr. Im Unterschied zucerr ist der Stream clog gepuffert und wird normalerweise für Protokollausgaben verwen-det.

Alte und neue Stream-Funktionen sollten in einem Programm nicht gemischt werden, d.h.wenn beispielsweise für die Eingabe cin benutzt wird, sollte an anderer Stelle nicht scanf()aufgerufen werden.

Im folgenden wird gezeigt, wie die neuen Streams zu verwenden sind. Dazu sind noch keineKenntnisse über Klassen notwendig. Erst in einem späteren Kapitel wird auf die Klassenhier-archie der iostream-Bibliothek eingegangen und werden weitergehende Fähigkeiten beschrie-ben.

Alle in der C++-Standard-Bibliothek definierten globalen Bezeichner gehören zum Namens-bereich std. Im Anschluß an die Direktive

using namespace std;

können diese Bezeichner direkt angesprochen werden.

Erste Schritte mit C++ 43

Page 38: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

44

2.3 Ausgaben mit cout

Bildschirmausgaben mit printf()

Bildschirmausgaben mit cout

#include <stdio.h>

int main(){

float zahl = 12.345f;

printf("Der Wert der Zahl: %f\n", zahl);

return 0;}

#include <iostream>using namespace std;

int main(){

float zahl = 12.345f;

cout << "Der Wert der Zahl: "; // Ein Stringcout << zahl; // Ein float-Wertcout << '\n'; // Ein Zeichen

// Und nochmal in einer Anweisung:

cout <<"Der Wert der Zahl: " << zahl << ’\n’;

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 39: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Ausgaben mit cout

Für die Ausgabe mit den Klassen der iostream-Bibliothek wurde der Shift-Operator <<»überladen«, d.h., er hat für Objekte dieser Klassen eine neue Bedeutung erhalten.

Beispiel: cout << "Hello world!\n";

Diese Anweisung bewirkt, dass der String "Hello world!\n" zur Standard-Ausgabe ( alsoauf den Bildschirm) »geschoben« wird. Mit seiner Richtung zeigt der Operator << an, wohingeschoben wird.

Ebenso wie Strings können auch Werte mit einem anderen Datentyp ausgeben werden.

Beispiel: int zaehler = 10;cout << zaehler; // Ausgabe: 10

Das Objekt cout ist »intelligent« genug, den Typ der Daten zu erkennen: Mit cout und demOperator << können außer Strings alle Werte ausgegeben werden, die einen elementaren Da-tentyp haben. Darüber hinaus kann der Anwendungsbereich des Operators << jederzeit aufandere Datentypen, auch selbstdefinierte Datentypen, ausgedehnt werden. Dazu muss derOperator << überladen werden. Diese Technik wird in einem späteren Kapitel behandelt.

Der Ausdruck cout << Wert; repräsentiert selbst wieder das Objekt cout. Daher kann derOperator << auch mehrfach hintereinander angewendet werden.

Beispiel: cout << "Dieser String und ein Zeichen: " << 'A';

In diesem Beispiel wird die Zeichenkonstante 'A' benutzt. Hier ist der folgende Unterschiedzwischen C und C++ zu beachten:

C: Eine Zeichenkonstante ist vom Typ int.C++: Eine Zeichenkonstante ist vom Typ char.

Am Bildschirm wird also wirklich A ausgegeben, und nicht etwa der Zeichencode von 'A'.

Ausgaben mit cerr

Die Standard-Fehlerausgabe cerr bietet dieselben Möglichkeiten wie cout. Insbesonderesendet auch cerr seine Ausgabe normalerweise zum Bildschirm.

Die Unterscheidung zwischen cout und cerr ist dann wichtig, wenn Ausgaben umgelenktwerden (z.B. in eine Datei). Fehlermeldungen sollten deshalb über cerr ausgegeben werden.Nur so ist sichergestellt, dass diese auch dann noch auf dem Bildschirm erscheinen, wenn dieStandard-Ausgabe umgeleitet wurde.

Erste Schritte mit C++ 45

Page 40: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

46

2.4 Eingaben mit cin

Beispiel für Stream-I/O mit cin, cout, cerr

//------------------------------------------------------------// Das Programm liest zwei Zahlen im Dialog ein// und gibt die groessere Zahl aus.//------------------------------------------------------------

#include <iostream>using namespace std;

int max( int, int);

char prompt[] ="Geben Sie zwei verschiedene Ganzzahlen ein: \n";

int main(){

int zahl1, zahl2;

// ----- ohne Fehlerbehandlung: -----cout << prompt;cin >> zahl1 ; cin >> zahl2;cout << "Die groessere Zahl ist: "

<< max(zahl1, zahl2) << "\n";

// ----- nochmal mit Fehlerbehandlung: -----cout << prompt;if( cin >> zahl1 && cin >> zahl2){

cout << "Die groessere Zahl ist: "<< max( zahl1, zahl2) << "\n";

return 0;}else{

cerr << "Fehlerhafte Eingabe! \n";return 1;

}}

int max( int a, int b) // Maximum von a und b liefern.{

return (a > b ? a : b);}

C++ – Alles zur objektorientierten Programmierung

Page 41: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Eingaben mit cin

Das Lesen von der Standard-Eingabe (also von der Tastatur) erfolgt mit cin und dem Opera-tor >> .

Beispiel: float var;cin >> var; // Gleitpunktzahl in var einlesen

Die Daten werden also von cin in die Variable var »geschoben«. Über den Typ der Variablenlegt cin selbständig fest, was als Eingabe akzeptiert wird und wie die Konvertierung erfolgt.Auf diese Weise können Werte mit einem elementaren Datentyp und Strings eingelesen wer-den.

Im Gegensatz zur Eingabe mit scanf() können keine leichtsinnigen Fehler durch die Wahlfalscher Formatelemente gemacht werden! Das obige Beispiel ist wirkungsgleich mit folgen-der scanf-Anweisung:

float var;scanf("%f", &var); // Gleitpunktzahl in var einlesen

Wie von scanf() her bekannt, gelten auch beim Einlesen mit cin und dem Operator >> fol-gende Regeln:

� Führende Zwischenraumzeichen werden überlesen.

� Die Verarbeitung der Eingabe bricht ab, wenn ein Zeichen nicht verarbeitet werden kann.

Beispiel: cin >> var; // Gleitpunktzahl in var einlesen

Erfolgt hier die Eingabe

1.20 DM

so wird 1.20 in der Variablen var gespeichert, und alle weiteren Zeichen bleiben im Einga-bepuffer. Bei der Eingabe von

DM 1.20

würde kein Wert an var zugewiesen, und die Eingabe bleibt unverarbeitet im Puffer.

Fehlerbehandlung

Das Progamm kann feststellen, ob ein Wert eingelesen wurde: Erfolgt die Eingabe nämlich ineiner Verzweigungs- oder Laufbedingung, so liefert der Ausdruck »wahr«, wenn die Eingabeerfolgreich war, andernfalls »falsch«.

Beispiel: float var;if( ! (cin >> var) ) cerr << "Fehler: Keine Zahl eingelesen!\n";

Auch das nebenstehende Beispiel demonstriert die Behandlung von Eingabefehlern.

Erste Schritte mit C++ 47

Page 42: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

48

2.5 Einlesen von Zeichen und Strings

Beispielprogramm

//------------------------------------------------------------// Das Geruest eines Filterprogramms// bei Verwendung von cin und cout//------------------------------------------------------------

#include <iostream>using namespace std;

int main(){

int c;

// Solange ein Zeichen eingelesen werden kann:while( ( c = cin.get()) != EOF){

cout << (char)c; // Zeichen wieder ausgeben.}

return 0;}

Hinweis Beim Lesen von der Tastatur wird das »Dateiende« durch ^Z (unter DOS/Win-dows) bzw. ^D (unter UNIX) erzeugt.

C++ – Alles zur objektorientierten Programmierung

Page 43: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Eingabe von Einzelzeichen

Mit dem Operator >> kann auch ein einzelnes Zeichen eingelesen werden.

Beispiel: char c;cin >> c; // Ein Zeichen nach c einlesen.

Dabei ist aber zu beachten, dass der Operator >> standardmäßig führende Zwischenraumzei-chen überliest! Bei der Eingabe

<Eingabetaste> <Tab> <Leertaste> <A> <Eingabetaste>

würde 'A' der Variablen c zugewiesen.

Soll jedes Zeichen, also auch ein Zwischenraumzeichen, eingelesen werden, kann dazu diecin-Methode get() aufgerufen werden.

Beispiel: int c;c = cin.get(); // Ein Zeichen nach c einlesen.

Die Methoden eines Objekts werden wie die Komponenten einer Strukturvariablen angespro-chen, also mit dem Punktoperator. Die Anweisung c = cin.get(); ist wirkungsgleich mitfolgender C-Anweisung:

c = getchar(); // Ein Zeichen nach c einlesen.

Insbesondere liefert cin.get() den Wert EOF, wenn das Dateiende erreicht ist oder ein Feh-ler auftrat. Das ist auch der Grund, warum hier c als int-Variable deklariert wurde.

Das nebenstehende Beispiel zeigt, wie das klassische Filtergerüst in C++ aussieht.

Eingabe von Strings

Auch die Eingabe von Strings mit dem Operator >> verhält sich wie die entsprechendescanf("%s", ... ); -Anweisung: Führende Zwischenraumzeichen werden überlesen,und Zwischenraumzeichen trennen die »Eingabefelder«.

Beispiel: char name[20];cin >> name; // Einen String nach name einlesen.

Bei der Eingabe von

Edith und Uwe

wird also nur das Wort "Edith" eingelesen. Alle weiteren Zeichen bleiben im Eingabepuffer.

Für das Einlesen einer vollständigen Zeile stellt cin die Methode getline() zur Verfügung.Beim Aufruf ist außer dem Eingabepuffer auch seine Größe anzugeben.

Beispiel: char name[20]cin.getline( name, 20); // String in name einlesen

Hiermit wird eine Zeile (incl. '\n'), aber maximal 19 Zeichen eingelesen. Das Zeilenendezei-chen '\n' wird nicht im String gespeichert.

Erste Schritte mit C++ 49

Page 44: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

50

2.6 Plazierung von Deklarationen

Deklaration von Variablen direkt vor ihrer Verwendung

Unterscheidung globaler und lokaler Variablen

//------------------------------------------------------------// Die Funktion NumSort() sortiert einen Vektor v[]// mit Gleitpunktzahlen in aufsteigender Reihenfolge// nach dem Selection-Sort-Algorithmus.//------------------------------------------------------------

void NumSort(double v[], int len){

for(int i = 0; i < len -1; i++){int mini = i; // mini: Der Index des bis dahin

// kleinsten Vektorelements.for( int j = i + 1; j < len; j++)

if( v[j] < v[mini]) // Index des kleinerenmini = j; // Elements merken.

double temp = v[i]; // v[i] und v[mini]v[i] = v[mini]; // tauschen.v[mini] = temp;

}}

#include <iostream>using namespace std;

char msg[] = "Ich bin der globale String!\n";

int main(){

char msg[] = "Ich bin der lokale String!\n";

cout << msg; // lokalcout << ::msg; // global

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 45: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Freie Plazierung

Bevor eine Variable oder Funktion in einem C++-Programm verwendet werden kann, muss siedeklariert werden.

Die Plazierung von Deklarationen ist in C auf bestimmte Stellen in einem Programm einge-schränkt: entweder außerhalb von Funktionen oder innerhalb von Funktionen unmittelbarhinter einer sich öffnenden geschweiften Klammer, d.h. am Beginn eines Blocks.

Dagegen können Deklarationen in C++ frei plaziert werden: Deklarationen dürfen auch über-all dort stehen, wo eine Anweisung erlaubt ist. Dadurch lassen sich Variablen näher bei derStelle deklarieren, wo sie auch verwendet werden. Sinnvoll eingesetzt, kann diese zusätzlicheFreiheit dazu beitragen, die Lesbarkeit von Programmen zu verbessern.

Eine typische Anwendung ist die Deklaration eines Schleifenzählers innerhalb einer for-Schleife.

Beispiel: for ( int i = 1; i <= 10; i++) cout << i << ". Durchlauf\n";

Die Deklaration wird hier im Initialisierungsteil vorgenommen.

Geltungsbereich

Der Geltungsbereich einer Variablen wird durch ihre Speicherklasse bestimmt. Lokale Variab-len haben den Geltungsbereich »Block«. Dieser beginnt mit der Deklaration und endet mitder Klammer }, die den Block schließt.

Gemäß dem C++-ANSI-Standard gilt aber für die for-Schleife folgende Ausnahme: Der Gel-tungsbereich einer Variablen, die im Initialisierungsteil der for-Anweisung deklariert wird, istdie for-Anweisung (und nicht etwa der Block, der die for-Anweisung enthält).

Bezogen auf das obige Beispiel bedeutet dies, dass die Variable i nach der Schleife nicht mehrzur Verfügung steht.

Der Bereichs-Operator ::

In C++ gibt es den neuen Operator ::, mit dem Bezug auf bestimmte Bereiche genommenwerden kann. Hauptsächlich wird er in Verbindung mit Klassen eingesetzt. Er läßt sich aberauch zur Unterscheidung globaler und lokaler Variablen einsetzen.

Eine innerhalb eines Blocks deklarierte Variable var »verdrängt« eine globale Variable glei-chen Namens. Im Geltungsbereich der lokalen Variablen kann dennoch mit

::var

auf die globale Variable zugegriffen werden. Von dieser Möglichkeit sollte natürlich möglichstselten Gebrauch gemacht werden, da die Lesbarkeit des Programms darunter leidet.

Erste Schritte mit C++ 51

Page 46: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

52

2.7 Prototyp von Funktionen

Einsatz von Prototypen

��������

�� ��� ����

// Definition der Funktion fun()

double fun() { . . . // Was die Funktion macht. }

�� ��� ����

// Prototyp und Aufruf der Funktion fun()

double fun(void); void f1() { . . . double a = fun(); . . . }

�� ��� ����

// Prototyp und Aufruf der Funktion fun()

double fun(void); void f2() { . . . double b = fun(); . . . }

C++ – Alles zur objektorientierten Programmierung

Page 47: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Funktionsprototypen

Funktionsprototypen wurden in C mit dem ANSI-Standard eingeführt. Der Prototyp einerFunktion ist die vollständige Deklaration der Funktion. Diese beschreibt

� den Typ des Return-Werts der Funktion und

� die Anzahl, die Reihenfolge und den Typ der Parameter

Der Compiler kann so bei jedem Aufruf prüfen, ob die Anzahl und der Typ der Argumenterichtig angegeben wurde.

Beispiel: int atoi(const char *str); //Prototyp von atoi()

Dieser Prototyp besagt,

1. dass die Funktion atoi() ein Argument erhält, nämlich einen String, der konstant seindarf, und

2. dass der Return-Wert vom Typ int ist.

Die Angabe des Prototyps kann nur dann entfallen, wenn sich die Definition der Funktion inderselben Quelldatei vor ihrem ersten Aufruf befindet. In diesem Fall ist die Definition selbstschon die Deklaration der Funktion.

Unterschied zu C

Eine Funktionsdeklaration mit leeren Klammern

typ func();

wird in C und C++ unterschiedlich interpretiert:

C: Keine Information über die Parameter der Funktion

C++: Die Funktion besitzt keine Parameter

Der Grund hierfür liegt in der Kompatibilität von ANSI-C zum Kernighan&Ritchie-Standard.Um Probleme zu vermeiden, sollte daher eine Funktion ohne Parameter stets wie folgt dekla-riert werden:

typ func(void);

Hinweis Anders als in C, gibt es in C++ für den Typ einer Funktion keine Standard-Vor-gabe. Daher muss (!) jede Funktion vor ihrem ersten Aufruf deklariert werden. Der Proto-typ wird entweder direkt in der Quelldatei angegeben oder indirekt durch Inkludieren ei-ner Header-Datei, die den Prototyp enthält.

Erste Schritte mit C++ 53

Page 48: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

54

2.8 Inline-Funktionen

Inline-Funktionen und Makros

//------------------------------------------------------------// Beispielprogramm zum Vergleich von// inline-Funktionen und Makros//------------------------------------------------------------

#include <iostream>using namespace std;

#define QUADRAT(x) ((x) * (x))

inline double quadrat(double x ){

return( x * x);}

int main(){

double zahl, erg;

zahl = 4.0;erg = QUADRAT(++zahl); // Achtung Seiteneffekt!cout << "Ergebnis: " << erg << "\n"; // falsch!

zahl = 4.0;erg = quadrat(++zahl); // alles ok!cout << "Ergebnis: " << erg << "\n";

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 49: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Inline-Definition

Beim Aufruf einer Funktion wird die Rücksprungadresse auf dem Stack gesichert und die Pro-grammausführung in der Funktion fortgesetzt. Nach Beendigung der Funktion erfolgt derRücksprung mit Hilfe der gesicherten Adresse. Dieser »Overhead« kann bei kleinen Funk-tionen im Vergleich zur eigentlichen Aufgabe der Funktion erheblich sein.

Zur Vermeidung dieses Nachteils kann in C++ eine Funktion als inline-Funktion definiertwerden. Beim Aufruf einer solchen Funktion fügt der Compiler den Funktionscode direkt ander Stelle ihres Aufrufs ein. Damit wird zur Laufzeit kein Unterprogrammsprung ausgeführt.Die Verwendung von inline-Funktionen erhöht so die Ausführgeschwindigkeit eines Pro-gramms.

Eine Funktion wird als »inline« definiert, indem das Schlüsselwort inline dem Funktions-kopf vorangestellt wird:

Beispiel: inline double min( double x, double y){ return (x < y ? x : y);}

Es ist naheliegend, dass eine inline-Funktion nur aus wenigen Anweisungen bestehensollte. Andernfalls wird der Programmcode bei mehrmaligen Aufrufen der Funktion zu um-fangreich.

Der Compiler kann bei zu umfangreichen Funktionen auch auf das Einfügen des Funktions-codes verzichten: Das Schlüsselwort inline wird ignoriert und eine entsprechende Warnungausgegeben. Dies kann schon dann der Fall sein, wenn die Funktion eine Schleife enthält.

Definition in Header-Dateien

Bevor eine inline-Funktion aufgerufen werden kann, muss sie zuvor in derselben Quelldateidefiniert worden sein. Für den Aufruf einer inline-Funktion genügt es nicht, ihren Prototypanzugeben. Der Compiler muss auch den Anweisungsblock der Funktion kennen.

Deshalb wird eine inline-Funktion, die in mehreren Quelldateien verfügbar sein soll, übli-cherweise in einer Header-Datei definiert. Das ist ein wesentlicher Unterschied zu »norma-len« Funktionen, deren Definition immer in einer Quelldatei stehen sollte.

Unterschied zu Makros

Inline-Funktionen sind mit parametrisierten Makros vergleichbar. Beim Aufruf eines Makrosnimmt der Präprozessor noch vor dem eigentlichen Kompiliervorgang einen textuellen Ersatzvor. Hierbei findet keine Typüberprüfung von Argumenten statt.

Im Unterschied dazu prüft der Compiler beim Aufruf einer inline-Funktion die Korrektheitdes Aufrufs, so wie bei jeder anderen Funktion auch. Darüber hinaus können auch keine Sei-teneffekte auftreten!

Erste Schritte mit C++ 55

Page 50: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

56

2.9 Aufzählungen

Beispielprogramm

//------------------------------------------------------------// Definition und Verwendung von Aufzaehlungen//------------------------------------------------------------

#include <ctype.h>#include <iostream>using namespace std;

enum SpruchTyp { WISSEN = 'W', LOESUNG = 'L',FAEHIGKEIT = 'F', ENDE = 'Q' };

int main(){

SpruchTyp spruch;char antwort;

do{cout << "\nWelchen Spruch wuenschen Sie?\n\n"

<< "\t <W> = Wissen\n"<< "\t <L> = Loesung\n"<< "\t <F> = Faehigkeit\n"<< "\t <Q> = Quit (Ende des Programms)\n";

cin >> antwort;spruch = (SpruchTyp)toupper(antwort);

switch( spruch){

case WISSEN:cout << "\nWissen ist Macht, \n"

"nichts wissen macht auch nichts!\n\n";break;

case LOESUNG:cout << "\nEine Loesung hatte ich,\n"

"aber die passte nicht zum Problem!\n\n";break;

case FAEHIGKEIT:cout << "\nZu allem faehig, \n"

"aber zu nichts zu gebrauchen!\n\n";break;

}}while( spruch != ENDE);

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 51: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Definition von Aufzählungen

Eine Aufzählung (engl. enumeration) ist ein selbstdefinierter Datentyp, dessen Wertebereichnur bestimmte ganzzahlige Werte umfasst.

Die Definition einer Aufzählung erfolgt mit dem Schlüsselwort enum. Dabei werden in einerAufzählungsliste die möglichen Werte und gleichzeitig Namen für diese Werte festgelegt.

Beispiel: enum Schalter { AUS, AN }; // Typ und KonstanteSchalter schalter1 = AUS; // Variable mit Wert AUS

Hiermit wird der Aufzählungstyp Schalter definiert und außerdem eine Variableschalter1 vom Typ Schalter.

Die in der Aufzählungsliste angegebenen Namen bezeichnen ganzzahlige Konstanten. Sofernkeine anderen Werte festgelegt werden, hat die erste Konstante den Wert 0 und jede weitereKonstante einen um eins höheren Wert als der Vorgänger.

Im obigen Beispiel hat also die Konstante AUS den Wert 0 und AN den Wert 1. Eine Variablevom Typ Schalter kann nur die Werte AUS oder AN annehmen.

Die Werte der Konstanten können explizit angegeben werden. Dabei ist jeder int-Wert zu-lässig.

Beispiel: enum Grundfarbe { BLAU = 1, GRUEN = 2, ROT = 4 };

Die explizite Wertzuweisung kann auch nur für einen Teil der Konstanten erfolgen:

enum Schalter { AUS, OFF = 0, AN, ON = 1 };

In dem hier definierten Aufzählungstyp Schalter haben die Konstanten AUS und OFF denWert 0, die Konstanten AN und ON den Wert 1.

Mit einer Aufzählung können bequem symbolische Konstanten definiert werden. Dies stellteine Alternative zur #define-Direktive dar. Sollen nur die Konstanten definiert werden, musskein Typname für die Aufzählung angegeben werden.

Beispiel: enum { SCHWARZ, BLAU, GRUEN, GELB, ROT, WEISS };

Operationen mit Aufzählungen

In C werden Variablen, die einen Aufzählungstyp besitzen, wie int-Variablen behandelt. Da-gegen sind in C++ Aufzählungen eigenständige Datentypen, für die keine arithmetischenOperatoren definiert sind!

Für Aufzählungen wird jedoch die Ganzzahlerweiterung durchgeführt, d.h., der Wert einerAufzählungsvariablen kann implizit in einen int-Wert umgewandelt werden. Für den umge-kehrten Weg ist immer eine explizite Typumwandlung notwendig.

Erste Schritte mit C++ 57

Page 52: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

58

2.10 Der Datentyp bool

Eine Funktion mit dem Ergebnistyp bool

//------------------------------------------------------------// Die inline-Funktion testRange() prueft,// ob ein int-Wert im Bereich zwischen// MIN_VAL und MAX_VAL liegt.//// Return-Wert: true oder false.//------------------------------------------------------------

enum { MIN_VAL = 20, MAX_VAL = 500 };

inline bool testRange( int val){

return (val >= MIN_VAL && val <= MAX_VAL);}

Hinweis

Wenn Sie einen Compiler benutzen, der den Datentyp bool noch nicht unterstützt, kön-nen Sie hilfsweise auch mit der folgenden Definition arbeiten:

enum bool { false, true };

Der Compiler wird aber immer dann ein »Warning« ausgeben, wenn ein Ausdruck vom Typint nach bool konvertiert werden muss.

Alternativ kann bool auch als Synonym für int definiert werden:

#define bool int#define false 0#define true 1

C++ – Alles zur objektorientierten Programmierung

Page 53: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Datentyp bool

In Verzweigungen oder Schleifen werden Ausdrücke verwendet, die »falsch« oder »wahr«sein können. Für die Darstellung dieser booleschen Werte benutzen C und frühere Versionenvon C++ den Typ int: Der int-Wert 0 bedeutet »falsch«, 1 bzw. jeder Wert ungleich 0 be-deutet »wahr«. Das ist hinreichend, aber keine gute Datenabstraktion.

Deshalb wurden in C++ für boolesche Werte der neue Datentyp bool sowie die Literalefalse und true eingeführt. Variablen mit dem Typ bool können nur zwei Werte annehmen:false für falsch und true für wahr.

Beispiel: bool merker = true; // Definition von merker.

if( merker == true ) // merker gesetzt ? . . .

Die Vergleichsoperatoren, also

< <= > >= == !=

liefern als Ergebnis den booleschen Wert true oder false.

Beispiel: float x = 1.5;bool vergleich = x < 2; // vergleich = true;

Boolesche Ausdrücke können mit den booleschen Operatoren

&& (UND) || (ODER) ! (NICHT)

verknüpft werden. Sowohl die Operanden als auch das Ergebnis dieser Operanden haben denTyp bool.

Beispiel: int a = 1, b =20;while( a < 10 && b > 10){ . . . }

Der Datentyp bool ist eng mit dem Typ int verbunden: In beiden Richtungen (also von intnach bool und von bool nach int) werden implizite Typumwandlungen vorgenommen.

Beispiel: cout << "Der Wert von false: " << (int) false << "Der Wert von true: " << (int) true << '\n';

Hier wird false bzw. true in int umgewandelt und ausgegeben, nämlich als 0 bzw. 1, wienicht anders zu erwarten ist. Der Cast wäre hier allerdings nicht nötig gewesen: Standardmä-ßig gibt cout boolesche Werte als 0 bzw. 1 aus.

In der umgekehrten Richtung wird 0 in false umgewandelt und jeder andere Wert in true.

Erste Schritte mit C++ 59

Page 54: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

60

2.11 Übungen

Beispielaufruf der Funktion sprintf()

Manipulatoren für die Ein- und/oder Ausgabe

#include <stdio.h>#include <iostream>using namespace std;

float dm = 123.90;char buf[81]; . . . sprintf( buf,"Ein Beispiel! Betrag: %10.2f\n", dm); cout << buf;

Manipulator Bedeutung für

oct, dec, hex Oktale, dezimale, hexadezimale Ein-/Ausgabe(Standard: dec)

cin, cout

setw(n) Setzt die Feldbreite n. Diese Einstellung gilt nur für die nächste Ein-/Ausgabe!

cin, cout

flush Leert den Ausgabepuffer. cout

endl Gibt ein New-Line aus u. leert den Ausgabepuffer. cout

setfill(c) Definiert das Füllsymbol c (Standard: Leerzeichen). cout

setprecision(n) Definiert die Genauigkeit n zur Ausgabe von Gleitpunktzahlen (Standard: 6 Stellen).

cout

Hinweis

1. Mit dem Manipulator setw(n) für die Eingabe wird festgelegt, wieviele Zeichen in ei-nen String maximal eingelesen werden, nämlich höchstens n-1. Damit kann verhindertwerden, dass bei der Eingabe von Strings über das Ende des char-Vektors hinaus ge-schrieben wird.

2. Bei der Ausgabe von Gleitpunktzahlen werden standardmäßig keine abschließendenNullen nach dem Dezimalpunkt angezeigt. Sollen stets so viele Stellen nach dem Dezi-malpunkt angezeigt werden, wie mit der Angabe von setprecision() festgelegtwurde, kann das durch die folgende Anweisung erreicht werden:

cout.setf(ios::fixed);

Damit ist die Ausgabe auf die Dezimalpunkt-Darstellung festgelegt. Ohne diese Anwei-sung wird bei sehr kleinen bzw. großen Zahlen auf die Exponential-Darstellung umge-schaltet.

C++ – Alles zur objektorientierten Programmierung

Page 55: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

1. Aufgabe

In einem C++-Programm, das für die Bildschirm-Ein-/Ausgabe mit den neuen Streams arbei-tet, sollte nicht zusätzlich die Funktion printf() verwendet werden. Will man auf die For-matierungsmöglichkeiten von printf() nicht verzichten, so kann die Formatierung im Spei-cher erfolgen. Sie ist damit von der eigentlichen Ausgabe getrennt.

Die Formatierung im Speicher erfolgt mit der Standard-Funktion sprintf(). Diese arbeitetwie printf(), jedoch mit dem Unterschied, dass die Zeichen nicht in die Standard-Ausgabe,sondern in einen String kopiert werden. Dieser ist als erstes Argument von sprintf() anzu-geben. Die weiteren Argumente entsprechen denen von printf(). Der Prototyp vonsprintf() ist in der Header-Datei stdio.h enthalten.

Testen Sie die Formatierungsmöglichkeiten mit sprintf(), indem Sie die Tabellenüber-schrift:

Artikelnummer Artikelbezeichnung Preis-------------------------------------------------

sowie drei passende Tabellenzeilen zunächst in einen String kopieren und anschließend mitcout ausgeben lassen.

2. Aufgabe

Die Klasse iostream bietet verschiedene Formatierungsmöglichkeiten für die Ein-/Ausgabe.Hierzu gehören sogenannte Manipulatoren, die als Operanden der Shift-Operatoren den Ein-/Ausgabestrom »manipulieren«. Beispielsweise setzt der Manipulator setw() eine Feld-breite:

cout << setw(8) << x;

Der Wert der Variablen x wird dann rechtsbündig in ein Feld der Feldbreite 8 positioniert. Ne-benstehend sind mehrere wichtige Manipulatoren zusammengestellt.

Für alle Manipulatoren, die mindestens ein Argument erhalten, muss zusätzlich die Header-Datei iomanip inkludiert werden.

Testen Sie die verschiedenen Formatierungsmöglichkeiten mit Hilfe der Manipulatoren, in-dem Sie:

� Eine Ganzzahl mit cin einlesen und ihren Wert dezimal, oktal und hexadezimal ausgeben.

� Eine Ganzzahl oktal und eine zweite Ganzzahl hexadezimal mit cin einlesen und anschlie-ßend beide in zwei verschiedenen Zeilen dezimal ausgeben.

� Eine Ganzzahl in ein Feld der Feldbreite 20 ausgeben, das mit dem Zeichen '*' aufgefülltwird.

� Einen String in ein Feld vorgegebener Breite setzen.

� Eine Gleitpunktzahl mit der Genauigkeit 12 ausgeben lassen.

Erste Schritte mit C++ 61

Page 56: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

62

3. Aufgabe

� Ändern Sie die Definitionen der Funktionen getDate() und showDate() in der Quell-datei datum.cpp (vgl. 1. Kapitel, 2. Aufgabe), indem Sie die C-Funktionen für die Ein-/Ausgabe durch cin und cout ersetzen.Außerdem sind die Funktionen getDate() und isLeapYear() so zu ändern, dass sieden Ergebnistyp bool statt int besitzen.

� Deklarieren Sie in einer Header-Datei person.h eine Struktur Person mit Komponentenfür Name, Vorname und Geburtsdatum. Verwenden Sie hierbei die bereits definierte Struk-tur Datum.

� Schreiben Sie eine Funktion getPerson(), welche die Daten einer Person in eine Struk-turvariable vom Typ Person einliest. Verwenden Sie die bereits erstellte Funktion get-Date().

� Erstellen Sie eine Funktion showPerson(), welche die Daten einer Person, die ihr als Ar-gument übergeben werden, ausgibt. Verwenden Sie die bereits erstellte FunktionshowDate().

� Stellen Sie die Prototypen der Funktionen getPerson() und showPerson() in die Hea-der-Datei person.h. Die Definitionen der Funktionen getPerson() und showPer-son() sollen in einer eigenen Quelldatei person.cpp stehen.

� Testen Sie die Funktionen mit einer geeigneten main-Funktion, die Sie ebenfalls in einereigenen Quelldatei person_t.cpp erstellen.

Die Dateien dieser Aufgabe:

Die Header-Dateien: date.h person.h

Die Quelldateien: date.cpp person.cpp person_t.cpp

C++ – Alles zur objektorientierten Programmierung

Page 57: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

2.12 Lösungen

Zur 1. Aufgabe

// -------------------------------------------------------------// Datei: sprintf.cpp// Zweck: Formatierung im Speicher mit sprintf()// und Ausgabe mit cout.// -------------------------------------------------------------

#include <stdio.h> // Prototyp von sprintf().#include <iostream> // Fuer cout.using namespace std;

struct artikel { int nr; char bez[20]; double preis; };

int main(){ artikel artTab[3] = { { 110, "Hose", 98.90 }, { 120, "Jacke", 148.00 }, { 130, "Bluse", 88.80 } }; char str[50];

cout << "\n Artikelnummer Bezeichnung Preis" << "\n----------------------------------------------\n";

for( int i = 0; i < 3; ++i) { sprintf(str," %-20d %-20s %6.2f\n", artTab[i].nr, artTab[i].bez, artTab[i].preis);

cout << str; }

return 0;}

Erste Schritte mit C++ 63

Page 58: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

64

2.13 Lösungen (Fortsetzung)

Zur 2. Aufgabe

// -------------------------------------------------------------// Datei: cincout.cpp// Zweck: Formatierte Ein-/Ausgabe mit cin, cout.// -------------------------------------------------------------

#include <iostream>#include <iomanip> // Fuer Manipulatoren mit Argumentenusing namespace std;

int main(){ int x, y, z;

// Teil a) cout << "\nBitte eine Ganzzahl eingeben: "; cin >> dec >> x;

cout << "dezimal: " << dec << x << endl; cout << "oktal: " << oct << x << endl; cout << "hex: " << hex << x << endl;

// Teil b) cout << endl << "Bitte eine oktale Ganzzahl eingeben: "; cin >> oct >> y; cout << endl << "Bitte eine Hex-Zahl eingeben: "; cin >> hex >> z;

cout << dec; cout << "Die erste Zahl dezimal: " << y << endl; cout << "Die zweite Zahl dezimal: " << z << endl;

// Teil c) cout << endl; cout << setw(20) << setfill('*') << 1234 << endl;

// Teil d) cout << endl; cout << setw(20) << "Feldbreite: 20" << endl; cout << "Ohne Feldbreite" << endl;

// Teil e) cout.setf(ios::fixed); cout << endl; cout << setprecision(12) << 12.3456789012345 << endl;

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 59: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Zur 3. Aufgabe

// -------------------------------------------------------------// Datei: datum.h// Zweck: Definition der Struktur Datum und// Deklaration zugehoeriger Funktionen.// -------------------------------------------------------------

#ifndef _DATUM_#define _DATUM_

// Falls Typ bool noch nicht definiert:// #define bool int// #define false 0// #define true 1

struct Datum { int tag, monat, jahr; };

// Prototypen: void showDate(Datum dat);bool getDate(Datum *p);void actDate(Datum *p);bool isLeapYear(int year);

#endif

// -------------------------------------------------------------// Datei: datum.cpp// Zweck: Definition der Funktionen fuer die Struktur Datum.// -------------------------------------------------------------

#include "datum.h"#include <time.h>

#include <iostream>using namespace std;

// -------------------------------------------------------------// showDate(): Datum anzeigen

void showDate(Datum dat){ cout << dat.tag << '.' << dat.monat << '.' << dat.jahr << endl;}

Erste Schritte mit C++ 65

Page 60: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

66

2.14 Lösungen (Fortsetzung)

Zur 3. Aufgabe (Fortsetzung)

// -------------------------------------------------------------// getDate(): Datum im Dialog einlesen// Return-Wert: true, falls Eingabe ok// false sonst.

bool getDate(Datum *p){ static int tageImMonat[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int tag=0, monat=0, jahr=0;

cout << "\nTag: "; cin >> tag; if(tag < 1 || tag > 31) return false;

cout << "Monat: "; cin >> monat; if(monat < 1 || monat > 12 || tag > tageImMonat[monat]) return false;

cout << "Jahr: "; cin >> jahr; if(jahr < 1 || (!isLeapYear(jahr) && monat == 2 && tag == 29) ) return false;

p->tag = tag; p->monat = monat; p->jahr = jahr;

return true;}

// -------------------------------------------------------------// actDate(): Das aktuelle Datum holen.

void actDate(Datum *p){ struct tm *systime; time_t sec;

time(&sec); systime = localtime(&sec);

p->tag = systime->tm_mday; p->monat = systime->tm_mon + 1; p->jahr = systime->tm_year + 1900;}

C++ – Alles zur objektorientierten Programmierung

Page 61: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// -------------------------------------------------------------// isLeapYear(): Stellt fest, ob ein Schaltjahr vorliegt.// Return-Wert: true, falls ja// false, falls nein

bool isLeapYear(int year){ return (year%4 == 0 && year%100 != 0) || year%400 == 0;}

// -------------------------------------------------------------// Header-Datei person.h// Modulare Programmiertechnik einsetzen.// -------------------------------------------------------------

#ifndef _PERSON_#define _PERSON_

#include "datum.h"

struct Person{ char name[32]; char vorname[24]; Datum geb;};

// Die Prototypen:bool getPerson(Person *p);void showPerson( Person pers);

#endif

Erste Schritte mit C++ 67

Page 62: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

68

2.15 Lösungen (Fortsetzung)

Zur 3. Aufgabe (Fortsetzung)

// -------------------------------------------------------------// Datei: person.cpp// Zweck: Definition der Funktionen fuer die Struktur Person// -------------------------------------------------------------#include "person.h"#include <iostream>#include <iomanip>using namespace std;

bool getPerson(Person *p){ cout << "\nBitte Daten einer Personen eingeben.\n";

cout << "\nNachname: "; cin >> setw(31) >> p->name;

cout << "\nVorname: "; cin >> setw(23) >> p->vorname;

cout << "\nGeburtstag: "; return getDate(&(p->geb));}

void showPerson(Person pers){ cout << "\n\n\n" << "Die Personen-Daten:" << endl; cout << "-------------------" << endl; cout << "\tName: " << pers.name << endl; cout << "\tVorname: " << pers.vorname << endl; cout << "\tGeburtstag: "; showDate(pers.geb);}

// -------------------------------------------------------------// Datei: person_t.cpp// Zweck: Mit Strukturen vom Typ Person und Datum arbeiten// und modulare Programmiertechnik einsetzen.// Module: person_t.cpp person.cpp datum.cpp// -------------------------------------------------------------#include "person.h"#include <iostream>using namespace std;

int main(){ Person pers; if (!getPerson(&pers)) cerr << "\nFehler bei der Eingabe!\n"; else showPerson(pers);

return 0;}

C++ – Alles zur objektorientierten Programmierung

Page 63: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Die CD zum Buch

Im folgenden erhalten Sie eine kurze Übersicht über den Inhalt der CD. Weitere Hinweise fin-den Sie in der Datei LiesMich.txt oder LiesMich.htm im Hauptverzeichnis der CD. Details zurInstallation eines Compilers stehen in einer LiesMich-Datei im entsprechenden Unterver-zeichnis. Die beiliegende CD enthält folgende Unterverzeichnisse:

Buch.src

Hier befinden sich die Lösungen zu den Aufgaben im Buch nach Kapiteln geordnet. So enthältz.B. das Verzeichnis Kap05 die Lösungen zu den Aufgaben aus dem 5. Kapitel.

Borland\BorlandCommandLineTools

In diesem Verzeichnis befindet sich der Borland C++ Compiler 5.5 (BCC32). Dieser frei ver-fügbare Compiler wird aus der Kommandozeile aufgerufen. Er ist der Kern von Borland's C++Compiler Technologie und wird z.B. auch vom Borland C++ Builder 5 Enterprise verwendet.Zur Installation rufen Sie in diesem Verzeichnis das Programm FreeCommandLineTools.exeauf.

cygwin

Hier befindet sich der GNU C++ Compiler für Windows von der Firma Cygwin. Dieser Com-piler ist besonders für Freunde von UNIX zu empfehlen, da er auch UNIX-Systemaufrufe, z.B.fork(), unterstützt. Außerdem wird neben dem Compiler eine UNIX Umgebung bereitgestellt.So ist beispielsweise die Ausführung von Shell-Skripten möglich. Zur Installation rufen Sie indiesem Verzeichnis das Programm full.exe auf.

CREdit

Sofern Sie nicht schon einen eigenen Editor zur Erstellung von C++ Programmen verwenden,können Sie diesen modernen, frei verfügbaren Programm-Editor einsetzen. Er unterstütztSyntax-Highlighting und ermöglicht den direkten Aufruf eines Kommandozeilen Compilers.Zur Installation rufen Sie in diesem Verzeichnis das Programm setup.exe auf.

Borland\CBuilder5

In diesem Verzeichnis befindet sich eine Trial Version des Borland C++Builder 5 Enterprise, d.i.eine integrierte Entwicklungsumgebung für C++ mit zahlreichen Tools. Die Trial Version erfor-dert eine Registrierung bei Borland und kann dann 60 Tage benutzt werden.

Zur Installation rufen Sie in diesem Verzeichnis das Programm install.exe auf. Sie werden dannzur Registrierung aufgefordert und erhalten anschliessend per email von Borland ein Passwort.Mit diesem Passwort kann die Installation abgeschlossen werden.

Die CD zum Buch 763

Page 64: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard
Page 65: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Index

!#define 574#ifndef 101#include 574__cplusplus 353

AAbbau

von Objekten 263Ableitung

direkte 255mehrfache 323

abort() 453, 455abs() 722, 737Absolutbetrag

einer komplexen Zahl 722abstrakt

Klasse 303Abstraktion 23Access Declaration 271acos() 739Ada 29Adapter

-Klasse 658Addition 756adjacent_find( ) 702adjustfield 520, 632, 633Adresse 598Adressoperator 598

& 81Alert 578Algol68 29Algorithmen-Bibliothek 699Algorithmus

Binary-Search 357Bubble-Sort- 381Euklid 245für sortierte Mengen 713Heap-Sort- 479, 481, 715Laufzeit 656Mengen-Operationen 714Permutationen 712Quick-Sort- 357, 479Rotieren 709

Selection-Sort- 371Transformation 706Verteilungen 708Zerlegungen 711zum Ersetzen 707zum Füllen 707zum Kopieren 704zum Löschen 708zum Mischen 713zum Sortieren 710zum Suchen 701zum Tauschen 706

Aliasnamebei Referenzen 81für Namensbereich 351

Allokator 612-Klasse 658-Zugriff 665

Anfangswert 179, 578ANSI

Komitee 29-Standard 243, 293, 345, 377

Anweisungbreak 593continue 593do-while 591for 590goto 593if-else 591return 574, 594switch 592while 590

any( ) 694app 542, 634append() 475, 617apply() 734arg() 722Argument 595

Default- 71, 403-Liste 403Objekt 127Typüberprüfung 55von Funktions-Templates 379von Klassen-Templates 401

Index 765

Page 66: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

766

Array 133assoziativer 213, 221von Objekten 133

array 596ASCII-Code 577asin() 739assign( ) 616, 618, 666, 671, 676assoziativer Array 213at( ) 473, 614, 662, 664, 669atan() 739atan2() 739ate 542, 634Aufbau

von Objekten 107, 299Aufruf

Funktions- 595impliziter 111-Konvention 71-Konventionen 83redefinierter Methoden 267von Destruktoren 299von Konstruktoren 329von Operatorfunktionen 207

Aufzählung 57Ausdruck 586

boolscher 59mit Referenztyp 85

Ausgabe 45formatierte 580Gleitpunktzahl 582in Dateien 543-puffer leeren 528, 529, 644rechts-/linksbündig 581-Streams 509unformatierte 515von booleschen Werten 529von Ganzzahlen 523von Gleitpunktzahlen 524, 525von String-Streams 551

Ausnahme-Behandlung 419Auswahloperator 589, 757

Bback( ) 664, 669, 674, 680Backslash 577Backspace 578bad() 516, 519, 635

bad_alloc 718bad_cast 489bad_exception 453bad_typeid 497badbit 516, 632basefield 520, 632Basic Types 575basic_filebuf 629basic_ifstream 628basic_ios 628basic_istream 628basic_istringstream 628basic_ofstream 628basic_ostringstream 628basic_streambuf 628, 629basic_string 465, 611basic_stringbuf 629basic_stringstream 628Basis

interner Darstellung 749Basisinitialisierer 265, 329Basisklasse 27, 253

direkte 255, 325indirekte 255, 325mehrfache 325virtuelle 327, 491

Basisklassenzeiger 287Baum

binärer 479Höhe 478optimal 478

beg 635begin( ) 665, 670, 675, 685, 689Behandlung

von Fehlern 419Bell Labs 572Bereich

privater 99public- 99

Bereichsoperator 51, 183, 261, 267, 345, 757Bereichsüberprüfung

durch Zugriffsmethoden 121für Strings 473

BetriebssystemUnix 572

Bewertungbedingte 757

Index

Page 67: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Bezeichner 347, 580globaler 349Read-Only- 81

BibliothekAlgorithmen- 700C- 353I/O-Stream- 627iostream- 43, 505Klassen- 295numerische 717String- 465, 611zur Sprachunterstützung 747

bidirektionalIterator 660

binär 586Binärmodus 607binary 542, 634BinaryPredicate 678binarySearch() 381Bindung

dynamische 295frühe 295späte 295statische 295

Bindungsinformation 353Bit

-Operator 588Bitfeld 520, 521, 524, 632Bit-Operatoren 756Bitset

Container 657bitset<N> 659, 693Blatt 478Block 51

catch- 423try- 423

Blockweise I/O 545bool 59, 588boolalpha 529, 633, 639break 593BS 578bsearch() 357Bubble-down 479Bubble-Sort-Algorithmus 381Bubble-up 479

CC 29

-Compiler 353-Erweiterungen 31, 69-Funktion in C++-Programmen 353-Header-Datei 353-Module in C++-Programmen 353Programmiersprache 572Standardbibliothek 572-String 155, 465

C++Eigenschaften 31Geschichte 29Programmerstellung 33Unterschied zu C 45, 51, 53, 57, 75

c_str() 471, 616Call

by Reference 83, 127, 596by Value 79, 127, 596

Call by reference 600, 603Call by value 603calloc() 604capacity( ) 469, 614, 665Carriage Return 578case 593Cast

const- 495Cross- 491Down- 487, 493in void* 491-Operatoren 756reinterpret- 495statischer 493Up- 487, 493

Cast-Operator 589catch 423cctype 612cerr 43, 45, 511, 631cfloat 748char 575CHAR_MAX 753CHAR_MIN 753charT 612, 628cin 43, 47, 511, 631class 99

base 253derived 253

Index 767

Page 68: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

768

Clean up 111clear( ) 516, 519, 615, 635, 666, 667, 670, 672, 675, 677, 686, 691

climits 748clog 43, 511, 631close() 542, 650, 651, 652Clu 29Code

ASCII 577Exit- 574Zeichen- 581

ComissionInternational Electrotechnical 750

Comparator-Klasse 658

compare() 622Compiler 33Compilierung

bedingte 353complete 486complex 718conj() 722const 75, 181, 495, 497, 601

Methode 123-Objekt 75-Parameter 75, 79-Zeiger 77

const_cast 495const_iterator 660const_reverse_iterator 660const-Cast 495, 756Container 657

assoziativer 657, 659-Klasse 391, 658sequentieller 657, 658

Container-Bibliothek 655Container-Klasse 487continue 593copy( ) 616, 704copy_backward( ) 704copyfmt() 638cos() 724, 738cosh() 725, 739Cosinus 724, 739

Hyperbolicus 725, 739Cotangens 724count( ) 687, 691, 694, 703count_if( ) 703

cout 43, 45, 509, 511, 631CR 578Cross Cast 491cshift() 734cstdlib 612cstring 612Ctrl-D 513Ctrl-Z 513cur 635cwchar 612cwtype 612

DDarstellung

als Festpunktzahl 525exponentielle 525interne 749

data() 471, 616Datei

aktuelle Position 607ausführbare 33binäre 607Ein-/Ausgabe 543-Ende 48, 585eröffnen 543, 605Header- 33-Name 543Objekt- 33-Offset 609Quell- 33schließen 543-Stream 543-Zugriff, sequentieller 545-zugriff, wahlfrei 547

Dateiende 583Dateiverarbeitung 543Dateizugriff

wahlfrei 609Datenabstraktion 21, 23, 99, 253Datenelement

konstantes 181statisches 183

Datenkapselung 21, 25, 99, 187, 255, 269Datensatz 602Datentyp 497

bool 59char 575

Index

Page 69: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

double 576elementarer 575float 576-Hierarchie 237int 575Klasse 99long 575long double 576Referenz 81short 575size_t 356, 589von Konstante 576

DBL_DIG 753DBL_EPSILON 753DBL_MANT_DIG 753DBL_MAX 753DBL_MAX_10_EXP 753DBL_MAX_EXP 753DBL_MIN 753DBL_MIN_10_EXP 753DBL_MIN_EXP 753dec 60, 520, 522, 632, 639Default

-Konstruktor 109, 119, 133, 263-New-Handler 153

Default-Argument 71von Templates 403

default-Marke 593Definition

abgeleiteter Klassen 255Funktion 594Variable 578von Destruktoren 111von Funktions-Templates 369von Konstruktoren 107

Deklarationconst 79extern 353friend 187, 189Plazierung 51private 25public 25using- 347virtueller Basisklassen 327von Destruktoren 111von Funktionen 53von Funktions-Templates 373von konstanten Objekten 75

von konstanten Zeigern 77von Konstruktoren 107von Objekten 103von Referenzen 81von Variablen 51von Zeigern auf konstante Objekte 77

Dekrement-Operator 586

delete 145, 149, 757klassenspezifisch überladen 219überladen 215

denorm_min() 752Deque

Container 657deque<T> 658, 669Design

von Klassenhierarchien 327Destruktor 103, 111

abgeleiteter Klassen 265Aufruf-Reihenfolge 299Minimal-Version 111virtueller 299

dezimalKonstante 576

Dezimalpunktanzeigen 525

Dezimalzahl 576Diagramm

Vererbungs- 329Differenzmenge 714

symmetrische 714digits 749digits10 749direkt

Ableitung 255Direktive

#define 574#define- 75using- 347

Division 586, 756Modulo- 586

double 576Down Cast 487, 493Draft Proposal 29dynamic_cast 489dynamisch

Bindung 295

Index

Page 70: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

770

EEditor 33Eiffel 31Ein-/Ausgabe

Streams 505Einfügen

in Deques 671in Listen 676in Maps 690in Queues 681in Sets 687in Stacks 683in Vektoren 667

Eingabe 47-Operator 511-Puffer 584unformatierte 513von Dateien 543von Strings 49von String-Streams 551Zahlen 583Zeichen 583

Eingabefeld 583Einlesen

unformatiertes 513von Dateien 543

Elementdynamisches 155, 305eines Namensbereichs 345private- 99protected 269public- 99Vektor- 596

Elementfunktion 23, 99abgeleiteter Klassen 259const- 123Definition 101inline- 119Redefinition 261virtuell 289von Klassen-Templates 395

Elementinitialisierer 265für Standardtypen 181für Teilobjekte 179

Elementzeiger 191Dereferenzierung 757

else-if-Kette 592

else-Zweig 591empty( ) 675, 680, 682, 684, 686, 690end 635end( ) 665, 670, 675, 685, 689endl 60, 529, 644Endlosschleife 591ends 529, 644enum 57Enumeration 57EOF 49, 583eof() 516, 519, 635, 641eofbit 516, 632epsilon() 752equal( ) 703equal_range( ) 687, 691, 713erase( ) 475, 618, 667, 672, 677, 686, 691Ergebnistyp

einer Funktion 73virtueller Funktionen 293

Eröffnungsmodus 517Datei- 543

Ersatztextueller 55

Ersatzbezeichnerbei Referenzen 81

Ersatztext 574Ersetzungsverfahren 707Erweiterbarkeit 505Escape-Sequenz 578Exception 144

auffangen 423auslösen 421auswerfen 427bad_alloc 215, 718bad_cast 489der Standard-Bibliothek 449failure 507-Handler 423-Handler, genereller 425klassenspezifische 433length_error 612-Liste 451matching 427nicht behandelte 429out_of_range 612-Spezifikation 451-Spezifikation virtueller Funktionen 457

Index

Page 71: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

-Spezifikation, fehlende 457unerwartete 453weitergeben 429

exception 449Header-Datei 453

Exception-HandlingKonzept 419Standard- 449

exceptions() 636Exit

-Code 574exit() 453exklusiv-ODER 588exp() 725, 740explicit 243explizit

Inline 119Instantiierung 405Instantiierung von Funktions-Templates 379Typumwandlung 237

Exponenteiner Gleitpunktzahl 749

Exponentialfunktion 725, 740exponentielle

Notation 577extern 353

Ffail() 516, 519, 635failbit 516, 519, 543, 632failure 507, 628false 59fclose() 606Fehler

-arten 447Ausgabe- 515-Behandlung 144, 153-Check bei Templates 397-klassenhierarchie 447logischer 447-meldung 507-Meldungen 45-Objekt 421-Objekt, erzeugen 427-Objekt, initialisieren 431-Objekt, zerstören 429-Situationen 419

Fehlerbehandlung 419Ein-/Ausgabe- 47konventionelle 419

Fehlerklasse 421, 431bad_typeid 497exception 449failure 507, 628, 631logic_error 447out_of_range 449OutOfRange 431

FehlerklassenStandard- 447

Fehlersuche 574Feld

-ausrichtung 521, 527-breite 527

Feldbreite 581, 582, 584feof() 608fflush() 584fgetc() 607fgets() 608FIFO-Prinzip 393, 657filebuf 507, 630, 650FILE-Pointer 606File-Stream 543fill( ) 527, 637, 707fill_n( ) 707Filterprogramm 514find( ) 477, 619, 687, 691, 701find_ first_of() 620find_end( ) 703find_first_not_of() 621find_first_of( ) 701find_if( ) 701find_last_not_of() 621find_last_of() 620first 687fixed 524, 633, 639Flächenberechnung

geometrischer Figuren 89Flag

von ios 517flags() 520, 521, 636flip( ) 668, 694float 576float.h 576float_round_style 751floatfield 520, 524, 632, 633

Index 771

Page 72: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

772

FLT_DIG 753FLT_EPSILON 753FLT_MANT_DIG 753FLT_MAX 753FLT_MAX_10_EXP 753FLT_MAX_EXP 753FLT_MIN 753FLT_MIN_10_EXP 753FLT_MIN_EXP 753FLT_RADIX 753flush 60, 529, 644flush() 515, 643fmtflags 632fopen() 605for 590for_each( ) 701Form Feed 578Format

-Element 580-Flags von ios 509, 521, 632-Flags, Zugriff 521-String 580-Variable 521

Formatierung 61I/O- 521von Ganzzahlen 523von Gleitpunktzahlen 525

Forward-Iterator 660fprintf() 608fputc() 607fputs() 608free() 145, 605Freigabe

von Speicherplatz 149Freispeicher 145friend

-Funktion 187-Klasse 189-Technik 189

front( ) 664, 669, 674, 680Front-Compiler 33fscanf() 608fseek() 609fstream 505, 543, 629, 630, 652ftell() 610Füllen 707Füllzeichen 527

Funktion 572Aufruf 595Definition 594Deklaration 595Element- 99elementare 724, 737Familien 367friend- 187globale 101Hyperbel- 725, 739Inline- 55inverse trigonometrische 739Konvertierungs- 241main() 572, 573, 594Name 594Operator- 205rein virtuelle 301rekursiv 595transzendente 737trigonometrische 724, 739überladen 73virtuelle 289

Funktionsblock 574Funktionsobjekt 662, 700Funktions-Template 367

Definition 369verschachtelte 371

fwrite() 608

GGanzzahl 576

Ausgabe 580-Erweiterung 57

gcount() 512, 647Geltungsbereich 51

globaler 345Genauigkeit 576, 582, 749

von Gleitpunktzahlen 525generate( ) 707generate_n( ) 707Generator 700Generierung

von Template-Funktionen 371get() 49, 512, 545, 646get_allocator( ) 665, 671, 674, 685getc() 607getchar() 584

Index

Page 73: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

getline() 49, 512, 626, 646getloc() 637, 642gets() 585get-Zeiger 545Gleichung

quadratische 89Gleitpunkt

-Konstante 576-Zahl 577

Gleitpunkttyp 575Gleitpunktzahl

Ausgabe 525, 582normalisierte Form 750

globalVariable 579

good() 516, 519goodbit 516, 632goto 593Grenzwerte

numerische 747gslice 741, 742gslice_array 744, 746

HHandler

terminate- 455unexpected- 453

has_denorm 750has_denorm_loss 750has_infinity 750has_quiet_NaN 750has_signaling_NaN 750Hat

-Beziehung 253Header-Datei 33, 55, 101, 353, 574

bitset 662C 572cctype 612cfloat 748, 753climits 748, 753complex 718cstdlib 612cstring 612cwchar 612cwtype 612deque 662exception 453

float.h 576fstream 543iomanip 61iostream 43, 511limits 748limits.h 575list 662map 662math.h 573queue 662set 662stack 662Standard- 596stddef.h 599stdexcept 449, 453stdio.h 584, 599string 612type_info 497und Namensbereiche 351und Templates 373valarray 718vector 662

Heap 145, 478, 715Bedingung 478-Sort-Algorithmus 481, 715

hex 60, 520, 522, 632, 639hexadezimal

Konstante 576Hexadezimalzahl 576Hierarchie

von Datentypen 237von Fehlerklassen 447von ios-Klassen 505

Höheeines Baumes 478

HT 578Hybrid-Sprache 31Hyperbelfunktion 725, 739

II/O-Stream 505

-Bibliothek 627Identifier 580IEC 559 Norm 750IEEE 576if-else 591ifstream 391, 505, 543, 629

Index 773

Page 74: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

774

ignore() 512, 647imag() 720, 722Imaginärteil 720imanip 533imbue() 637Implementierung

einer sortierten Liste 409einer Warteschlange 393eines Heaps 481eines Stacks 407einfach verketteter Listen 310mehrfache 367von Persistenz 555von Verschlüsselungsverfahren 553

implizitinline 119Instantiierung von Funktions-Templates 379Typumwandlung 237

in 542, 634in_avail() 641Include-Datei 33includes( ) 714Index 597Index-Operator 473, 757

verallgemeinerter 731Indexoperator 600indirect_array 744, 746indirekt

Basisklasse 255Indizierung

indirekte 746maskierte 746selektive 741verallgemeinerte selektive 744

Initialisierungabgeleiteter Klassen 263bei Mehrfachvererbung 329n-dim. Vektor 598-sliste 109Struktur 602Variable 579Vektor 597von Objekten 103, 107, 179von Referenzen 81von Teilobjekten 179von Vektoren 133

Initialisierungliste 133, 179

InkrementOperator 586

inline 55, 119Destruktor 119explizit 119-Funktion 55Funktions-Templates 371implizit 119Konstruktor 119Methode 119

inplace_merge( ) 714Input-Iterator 660insert( ) 475, 617, 667, 671, 687, 690Instantiierung

explizite von Templates 405von Template-Funktionen 371von Template-Klassen 397

Instanz 103einer Klasse 23

int 575INT_MAX 753INT_MIN 753Integer Types 575Interface

Basisklassen- 293öffentliches 119polymorphes 303Programmers- 509public- 257

internal 527, 633, 639iomanip 529, 630ios 505, 507, 629, 630

-Flags 517-Klassenhierarchie 505

ios::failure 507ios_base 628ios_traits 628ios-Manipulatoren 522iostate 517, 632iostream 629, 630, 649

-Bibliothek 43is_bounded 751is_exact 749is_iec559 750is_integer 749is_modulo 751is_open() 542, 650, 651, 652is_signed 749

Index

Page 75: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

is_specialized 749ISO/IEC 572ISO/IEC-Norm 572ISO-Standard 29Ist

-Beziehung 253-Beziehung bei Mehrfachvererbung 323

istream 391, 505, 511, 513, 629, 630, 645istringstream 391, 505, 549, 629istrstream 549iter_swap( ) 706Iterator 656, 660, 699

bidirektionaler 660Random-Access- 660

KK&R-Standard 572Kante 478Kapazität

von Strings 469Kellerstapel 657, 682Kette

else-if 592Klasse 23, 99

abgeleitete 27, 253abstrakte 303Adapter- 658Adresse 113, 165Airplane 331Allokator- 658Angestellter 273Arbeiter 273Artikel 107, 257bad_exception 453Basis- 253Bruch 221Comparator- 658Complex 239Container- 391, 658Datum 127Elektro 257Fehler- 421, 431Firma 193, 309friend- 189Instanz 23KombiKonto 329

konkrete 303Konto 193, 301polymorphe 487Stream- 391String 155Verschachtelung 177

Klassen-Array 133Klassenbibliothek 295, 345Klassenhierarchie 27, 255

Design 327ios 505Typumwandlung in 487

Klassen-Template 391basic_fstream 628basic_ifstream 628basic_ios 628basic_iostream 628basic_istream 628basic_istringstream 628basic_ofstream 628basic_ostream 628basic_ostringstream 628basic_string 465, 611basic_stringstream 628complex 719Definition 393gslice_array 744imanip 533indirect_array 744mask_array 744numeric_limits 747omanip 533slice_array 744, 745smanip 533SortList 409Stack 407string_char_traits 612valarray 729

Klassenvariable 183Knoten 478

innerer 478Kommaoperator 589, 757Kommentar 41, 574Kompatibilität 29konkret

Klasse 303konstant 181

Index 775

Page 76: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

776

Konstante 57case- 593ganzzahlige 576Gleitpunkt- 576String- 576, 577symbolische 57, 75, 574

Konstanzwegcasten 495

Konstruktor 103, 107abgeleiteter Klassen 263abstrakter Klassen 305Aufruf 109Aufruf-Reihenfolge 177, 329Default- 109, 119, 263für Teilobjekt 177Konvertierungs- 239Kopier- 161Minimal-Version 109überladen 107

Konvertierungabgeleiteter Klassen 285

Konvertierungs-Funktion 241-Konstruktor 239

Kopierkonstruktor 161abgeleiteter Klassen 305abstrakter Klassen 305

Kopierverfahren 704Kosekans 724

LLänge

von Strings 469Laufbedingung 590Laufzeit 656

Typinformation 488, 497Laufzeitfehler 447LDBL_DIG 753LDBL_EPSILON 753LDBL_MANT_DIG 753LDBL_MAX 753LDBL_MAX_10_EXP 753LDBL_MAX_EXP 753LDBL_MIN 753LDBL_MIN_10_EXP 753LDBL_MIN_EXP 753left 527, 633, 639

length( ) 469, 614length_error 471, 612Lese

-Zeiger 545Lesen

aus Dateien 543blockweises 545von String-Streams 551

lexicographical_compare( ) 711LF 578LIFO-Prinzip 407, 657limits 748limits.h 575Linker 33linksbündig

Ausgabe 527linksorientiert 478Links-Shift 709list<T> 658, 674Liste

Container- 657einfach verkettete 310Parameter 594sortierte 409

LiteralString- 577

locale 637Löschen 708

in Deques 672in Listen 677in Maps 691in Queues 681in Sets 686in Stacks 683in Vektoren 667

log() 725, 740log10() 725, 740Logarithmus 725, 740logic_error 447lokal

Variable 579long 575long double 576LONG_MAX 753LONG_MIN 753lower_bound( ) 687, 691, 713lvalue 493L-Wert 493

Index

Page 77: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Mmain() 572, 573, 594make_heap( ) 715Makro 55, 574

feof() 608malloc() 87, 145, 604Manipulator 509, 522, 529

Ein-/Ausgabe 60-Funktion 531selbstdefinierter 531, 533von ios 524, 639von istream 647von ostream 644

Mantisse 750Map 689

Container 657map<Key, T> 659map<T> 689Marke 593

case- 593default- 593private 99public 99

Maschinencodevon Funktions-Templates 369von Template Methoden 397von Template-Funktionen 371

MascittiRick 29

mask_array 744, 746Maske

boolesche 746math.h 573Matrix 597max( ) 709, 734, 737, 752max_element( ) 709max_exponent 750max_exponent10 750max_size( ) 469, 614, 665, 670, 675, 686, 690

Maximum 709Mehrdeutigkeit

bei Default-Argumenten 73bei Mehrfachvererbung 325bei Typumwandlung 243von Namen 347

mehrdimensional 598

Mehrfachvererbung 323Mehrfachzuweisung 163, 587

von Strings 467Mengen-Operationen 714merge( ) 677, 713Methode 23, 99

abgeleiteter Klassen 259const- 123Definition 101friend- 187inline- 119Read-Only- 123redefinieren 257, 261statische 185von Klassen-Templates 395Zugriffs- 121

Methodentabellevirtuelle 297

min( ) 709, 734, 737, 752min_element( ) 709min_exponent 749min_exponent10 749Minimum 709Mischen 713

von Listen 677mismatch( ) 702Modul 33, 101

C- 353und Templates 373

Modulodivision 586, 756Modulo-Typ 751Modus

Binär- 607multimap<Key, T> 659multimap<T> 692Multiple Inheritance 323Multiplikation 756multiset<T> 659, 688

NNachfolger 478Name 580

Datei- 543Funktion 594Template- 393

name() 497

Index 777

Page 78: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

778

NamenKonflikt 349Suche 349von Klassen 99

Namensbereich 345Aliasname 351anonymer 351std 43, 349unbenannter 351verschachteln 349

Namenskonflikt 345namespace 345narrow() 637new 145, 147, 757

klassenspezifisch überladen 219überladen 215

New-Handler 153, 167, 215temporärer 153

next_permutation( ) 712next-Zeiger 640NICHT 587

boolsches 59noboolalpha 639none( ) 694Norm

ISO/IEC- 572norm() 722noshowbase 522, 639noshowpoint 639noshowpos 522, 639noskipws 639Notation

exponentielle 577Präfix-/Postfix- 586

nouppercase 522, 639npos 477, 613nth_element( ) 711NULL 599numeric_limits 747

OObjekt 21, 23, 103

abgeleiteter Klasse 267Adresse 129als Argument 127, 129als Klassenelement 177als Return-Wert 131

const- 123degeneriertes 743dynamisch erzeugen 151Fehler- 421Funktions- 662konstantes 81persistent 554Read-Only 75, 123-sammlung 655temporäres 238vollständiges 486Wide-Stream- 391

Objektdatei 33objektorientiert 21oct 60, 520, 522, 632, 639ODER 587

boolsches 59exklusiv 588

ofstream 391, 505, 543, 629oktal

Konstante 576Oktalzahl 576omanip 533OOP 21open() 542, 650, 651, 652openmode 634Operand 586Operationen

für Listen 677Splice- 677

Operator 51, 261, 267, 586- 723, 735- (unär) 724, 732! 59, 635, 732!= 59, 497, 625, 723, 736% 735%= 733& 81, 735&& 59, 736&= 733( ) 209* 723, 735*= 720, 733+ 465, 624, 723, 735+ (unär) 724, 732+= 475, 623, 720, 733. 105.* 191, 202

Index

Page 79: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

/ 723, 735/= 720, 733< 59, 465, 625, 736<< 45, 211, 465, 509, 624, 644, 722, 735<<= 733<= 59, 465, 625, 736-= 720, 733= 163, 209, 615, 720, 732== 59, 497, 625, 723, 736-> 105, 209> 59, 465, 625, 736->* 191>= 59, 465, 625, 736>> 47, 211, 465, 511, 624, 648, 722, 735>>= 733^ 735^= 733| 735|= 733|| 59, 736~ 732Adress- 598arithmetischer 586Auswahl 757Auswahl- 589Bereichs- 51, 757Bit- 588, 756Bitset- 697bool() 643Cast- 237, 589, 756Dekrement 586Dekrement- 756delete 145, 151, 612, 757dynamic_cast 489-Funktion 205Index- 213, 757Inkrement- 586, 756Komma 589Komma- 757logischer 587, 756new 145, 151, 612, 757NICHT 588NICHT- 695ODER 588Pfeil- 105, 603, 757Punkt- 105, 603, 757reinterpret_cast 495Sequenz 589

Shift- 588, 696, 756sizeof 202, 757sizeof() 589, 597static_cast 493typeid() 497, 757überladen 203-Überladung 85UND 588Vergleichs- 59, 587, 756Verweis- 598, 757Vorrangtabelle 758Vorzeichen 586Zugriffs- 191, 757Zuweisungs- 163, 587, 756

operator 241Operatorenübersicht 756Operatorfunktion

virtuelle 307optimal

Baum 478ostream 391, 505, 509, 515, 629, 630ostringstream 391, 505, 549, 629ostrstream 549out 542, 634out_of_range 471, 473, 612OutOfRange 431Output-Iterator 660Overhead 297Overloading 73

Ppair<T1, T2> 687Paradigmen

der OOP 21Parameter 594

const- 601konstanter 79von Funktions-Templates 369von Klassen-Templates 399

partial_ sort( ) 710partial_ sort_copy( ) 710partition( ) 711Partitionierung 711peek() 647Permutationen 712Persistenz

von Objekten 554

Index 779

Page 80: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

780

Pfeiloperator 105, 603, 757Plazierung

von Deklarationen 51Pointer 598

FILE- 606polar() 722Polarkoordinaten 722Polymorphie 21, 27, 99, 289, 297pop( ) 407, 683, 684pop_back( ) 672, 677, 681pop_front( ) 672, 677pop_heap( ) 715Position

in Datei 547Zugriff 665

Positionierenabsolutes 547ios-Funktionen 547relatives 547

Postfix-Notation 586pow() 724, 738Präprozessor 55Präfix-Notation 586Präprozessor 573precision() 525, 636Predicate 678prev_permutation( ) 712printf() 43, 580Priorität 586Priority Queue 684, 715

Container 657priority_queue<T> 659, 684private 25, 99, 259, 271, 323Programmiersprache

C 572Programmierung

modulare 101objektorientierte 21prozedurale 21

protected 269, 271, 323Prototyp 53, 573

von Funktions-Templates 373pubimbue() 642public 25, 99, 255, 271, 323

-Interface 257pubseekoff() 640pubseekpos() 640pubsetbuf() 640

pubsync() 640Puffer 640

basic_filebuf 629basic_streambuf 628, 629basic_stringbuf 629-verwaltung 507Zeilen- 584

Punktoperator 105, 603, 757push( ) 407, 683, 684push_back( ) 667, 671, 676, 681push_front( ) 671, 676push_heap( ) 715put() 515, 545, 643putback() 512, 647putc() 607putchar() 585puts() 585put-Zeiger 545

Qqsort() 357Quadratwurzel 724Quelldatei 33

C 572Queue 393

Container 657queue<T> 659, 680Quick-Sort-Algorithmus 357quiet_NaN() 752

Rradix 749random_shuffle( ) 708Random-Access

-Iterator 660rbegin( ) 665, 670, 675, 685, 689rdbuf() 542, 638, 651, 652, 654rdstate() 516, 519, 635read() 512, 646Read-Only

-Bezeichner 81Methode 123Objekt 75, 123

readsome() 512, 646real() 720, 722realloc() 604Realteil 720

Index

Page 81: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

rechtbündigAusgabe 527

Rechts-Shift 709Redefinition

virtueller Funktionen 291von Klassenelementen 261von Methoden 257, 261

Referenz 81als Parameter 83, 127als Return-Wert 85auf abstrakte Klasse 303auf Basisklasse 287auf ein konstantes Objekt 127-Parameter 83und Zeiger 81

Reihenfolgevon Konstruktor-Aufrufen 329

rein virtuellFunktion 301

ReinitialisierungSchleife 591

reinterpret_cast 495, 756rekursiv 595remove( ) 678, 708remove_copy( ) 705remove_if( ) 678, 708rend( ) 665, 670, 675, 685, 689replace( ) 477, 618, 707replace_copy( ) 705replace_if( ) 707reserve( ) 469, 615, 666reset( ) 694resetiosflags() 639resize( ) 469, 615, 666, 670, 675, 734return 574, 594Return-Wert 595

const-Zeiger 79reverse( ) 678, 706reverse_copy( ) 704reverse_iterator 660rewind() 610rfind() 477, 619Richie, Dennis 572right 526, 633, 639Ring 395Ring-Shift 709rotate( ) 709rotate_copy( ) 709

round_error() 752round_indeterminate 751round_style 751round_to_infinity 751round_to_nearest 751round_toward_neg_infinity 751round_toward_zero 751RTTI 488Rückgabe

in Kopie 131von Referenzen 131

Run Time-Check 489-Type Information 488

Runden 751Rundungsfehler 752runtime_error 447rvalue 493R-Wert 493

Ssbumpc() 641scanf() 47, 583Schablone 367Schleife 590

Endlos- 591for 590

Schleifenrumpf 590Schlüssel 479, 553Schlüsselwort

catch 423class 99const 75, 181enum 57explicit 243extern 353friend 187inline 55, 119, 371namespace 345operator 241operator@ 205protected 269public 255static 183struct 99template 369, 393this 125

Index 781

Page 82: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

782

throw 421try 423using 347virtual 289580

Schlüsselworte 759Schnittmenge 714Schnittstelle

öffentliche 99polymorphe 303von Manipulator-Funktionen 531

Schreib-Zeiger 545

Schreibenblockweises 545in Dateien 543in String-Streams 551unformatiertes 515

scientific 524, 633, 639search( ) 703search_n( ) 702second 687Secret Key

Verschlüsselungsverfahren 553Seek

-Zeiger 609seekdir 547, 635Seek-Funktionen 547seekg() 547, 645seekp() 547, 643Seiteneffekt 55Sekans 724Selection Sort Algorithmus 371Semikolon 575sentry 643, 645sequentiell

Dateizugriff 545Sequenzoperator 589Set 685

Container 657set( ) 694set<T> 659, 685set_difference( ) 714set_intersection( ) 714set_new_handler() 153set_symmetric_difference() 714set_terminate() 455set_unexpected() 453, 455

set_union( ) 714setbase() 529, 639setf() 60, 520, 521, 636setfill() 60, 529, 639setiosflags() 639setprecision() 60, 529, 639setstate() 516, 519, 635setw() 60, 61, 529, 639sgetc() 641sgetn() 641Shift

arithmetischer 589logischer 589Operator 589

shift() 734Shiften 709Shift-Operator

<< 45>> 47überladen 211

Shift-Operatoren 756short 575showbase 522, 634, 639showpoint 524, 634, 639

ios-Flag 524showpos 522, 634, 639SHRT_MAX 753SHRT_MIN 753signaling_NaN() 752Signatur 73

virtueller Funktionen 291virtueller Operatorfunktionen 307von const-Methoden 123von Konstruktoren 107

Simula67 29sin() 724, 738sinh() 725, 739Sinus 724, 739

Hyperbolicus 725, 739size( ) 469, 614, 665, 670, 675, 680, 682, 684, 686, 690, 694, 734

size_t 469, 589size_type 469, 661sizeof() 589, 597sizeof-Operator 202, 757Skalar 720, 732skipws 529, 633, 639slice 741

Index

Page 83: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

slice_array 744, 745Smalltalk 31smanip 533snextc() 641Software-Entwicklung 21sort( ) 678, 710sort_heap( ) 715Sortieralgorithmus 367Sortieren 710

durch Austauschen 381durch Auswählen 371durch Zerlegen 357mit Heaps 715von Listen 678

Source-Datei 33Speicher

dynamischer 604freigeben 149, 605reservieren 145

Speicherklasse 51Speichermanagement 215, 223Speicherplatz

für Datentypen 575Speicherreservierung

für Vektoren 147Speicherverwaltung

dynamische 145für Klassen 151

Spezialisierungvon Template-Funktionen 375, 377

SpezifikationException- 451virtueller Funktionen 457

splice( ) 677Splice-Operation 677Sprachelemente

OOP-unabhängige 69Sprung

goto 593sputbackc() 641sputc() 642sputn() 642sqrt() 574, 724, 737sstream 630stable_ sort( ) 710stable_partition( ) 711Stack 407, 682

Container 657

-Unwinding 425, 429stack<T > 659stack<T> 682Stack-Unwinding 431Standard

ANSI 29ANSI- 243-Exceptions 449Header-Datei 596ISO 29K&R- 572-Kopierkonstruktor 161-Manipulator 529-Methoden 163-Streams 511-Zuweisung 163

Standard-Template-Library 656

Standardausgabe 43Standardbibliothek

C 572Standardeingabe 43Standardfehlerausgabe 43, 45Standardisierung

von C++ 29Standard-Klasse

failure 507filebuf 650fstream 652gslice 742ifstream 651ios 507, 632iostream 649istream 511, 513, 645istringstream 549, 654istrstream 549locale 637ofstream 651ostream 509, 515, 643ostringstream 549ostrstream 549sentry 643, 645slice 741streambuf 507string 465, 613stringbuf 549, 653stringstream 549strstreambuf 549

Index 783

Page 84: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

784

type_info 497wstring 465

Standard-Streams 631Standardwert 71Stapel 407Startup-Code 33static 183static_cast 493statisch

Bindung 295Cast 493

Status-Flag 509, 517, 632von ios-Flags abfragen 519von ios-Flags ändern 519von Streams 517-Wort 517

Statusinformation 183std 43, 349stddef.h 599stderr 43, 607, 608stdexcept 449, 453stdin 43, 607stdio.h 584, 599stdiobuf 507stdout 43, 607Steuerzeichen 577, 607STL 656str() 653, 654strcat() 87strcpy() 87Stream 43, 605

cerr 511clog 511cout 509I/O- 505-Klassen 391, 627-Puffer 628, 640Standard- 511String- 549synchronisieren 515verbinden 515

streambuf 507, 630, 640String 155, 577

Ausgabe 582ausgeben 585-Bibliothek 465C- 465, 597

Ein-/Ausgabe 465Einfügen 475einlesen 584Endezeichen 584Ersetzen 477Erzeugen 467Exception Handling 471Kapazität 469konstanter 473Länge 469leerer 577-Literal 577Löschen 475-Stream 549Suche 477Teil- 471Typumwandlung 471Vergleich 465Verkettung 465

string 465, 612string_char_traits 612String-Bibliothek 611stringbuf 507, 549, 630, 653stringstream 391, 505, 549, 629strlen() 87strncpy() 87Stroustrup, Bjarne 29strstreambuf 549strtol() 436struct 41, 99, 602Struktur 41

Komponente 603-Variable 602Zuweisung 602

substr() 471, 618Subtraktion 756Suchalgorithmus 367Suche

binäre 381, 713Handler- 427in Maps 691in Sets 687in Strings 477Maximum 709Minimum 709Namens- 349obere/untere Schranke 713Versions- 375

Index

Page 85: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Suchverfahren 701binäres 357, 381, 713

Suffix 576sum() 734sungetc() 641swap( ) 477, 618, 625, 667, 668, 672, 673, 674, 679, 686, 688, 691, 692, 706

swap_ranges( ) 706switch 592symbolisch

Konstante 574Symmetrie

von Argumenten 207symmetrisch

Differenzmenge 714sync() 647sync_with_stdio() 638Synchronisierung

von I/O-Operationen 515

TTabulator 578tan() 724, 738Tangens 724, 739, 740

Hyperbolicus 725, 739tanh() 725, 739Tauschen 706

von Deques 672von Listen 674von Maps 691von Sets 686von Vektoren 667

Teilergrößter gemeinsamer 245

Teilmenge 714Teilobjekt 177, 255, 487Teilvektor 741tellg() 547, 645tellp() 547, 643Template

-Argument 379, 401Default-Argumente 403-Funktion 371Funktions- 367Hilfs- 744Klassen- 391-Parameter 369, 399

template 369, 393Template-Klasse

complex<double> 727complex<float> 726complex<long double> 728Instantiierung 397

Template-Library 656Templates

und Module 373terminate() 423, 429, 453, 455terminate_handler 455test( ) 694Textmodus 607this 125throw 421tie() 515, 638tinyness_before 751to_string( ) 696to_ulong( ) 696Ton 578Toolbox 241top( ) 682, 684transform( ) 706Transformation 706traps 751true 59trunc 542, 634try 423Typ

Aufzählungs- 57bad_cast 489bad_typeid 497bool 59char 465charT 612enum 57failure 507fmtflags 521, 632ios_traits 628iostate 517, 632Klasse 99Modulo- 751openmode 634-Parameter von Funktions-Templates 369Referenz 81seekdir 547, 635size_t 356, 730size_type 469

Index 785

Page 86: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

786

terminate_handler 455type_info 497wchar_t 391, 465

Typ Siehe DatentypTypanpassung

bei Funktions-Templates 373Type mismatch 239type_info 497Type-Cast 237typeid() 497, 757Typfeld 289Typinformation 497

zur Laufzeit 488Typkonvertierung 237Typsicherheit 505Typumwandlung 57, 235, 237, 285

bei Zuweisung 285explizit 243, 287für Klassen 237implizit 239, 285in Klassenhierarchien 487Mehrdeutigkeit 243von Strings 471

UÜbersetzungseinheit 574UCHAR_MAX 753Überladen

binärer Operatoren 209Indexoperator 213Shift-Operator 211unärer Operatoren 209von delete 215von Funktionen 73von Konstruktoren 107von new 215von Operatoren mit Methoden 209von Template-Funktionen 375

Überladungder Zuweisung 163globale 217klassenspezifische 219von Methoden 261von Operatoren 203von Operatoren mit friend-Funktionen 207

UINT_MAX 753

ULONG_MAX 753unär 586UND 587, 588

boolsches 59unexpected() 453unget() 512, 647unique( ) 678, 708unique_copy( ) 705unitbuf 529, 634UNIX 572unsetf() 520, 521, 636Unterprogramm 572, 594Up Cast 487, 493

fehlerhafter 489upper_bound( ) 687, 691, 713uppercase 522, 634, 639USHRT_MAX 753using 347

Vvalarray 718, 729value_type 689Variable

definieren 578global 579lokal 579Namen 580Struktur- 602

Variable, lokale 51vector<T> 658, 664Vektor

boolescher 668Container- 657eindimensionaler 596-Länge 133Länge 597mehrdimensionaler 597, 743Name 599numerischer 717von Objekten 133

Verbergenvon Namen 351

Vereinigungsmenge 714Vererbung 21, 27, 99, 253

dynamischer Komponenten 305einfache 255private 270

Index

Page 87: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

protected 270public 255, 270

Vererbungsarten 323Vererbungsdiagramm 329Vergleich

Gleichheit 703lexikographischer 673, 711von Bitsets 695von Deques 673von Listen 679von Maps 692von Queues 681von Sets 688von Stacks 683von Vektoren 668von Zeigern 600

Vergleichsoperator 587Vergleichsoperatoren 59, 756Verschachteln

von Funktions-Templates 371von Namensbereichen 349von try-Blöcken 429

Verschlüsselung 553Version

virtueller Methoden 297von Funktionen 289von Template-Funktionen 375

Verteilungen 708Verweisoperator 598, 757Verzweigung

bedingte 591virtual 289

Basisklasse 327Methodentabelle 297rein 301

Virtual Method Table 297VMT 297

-Zeiger 297void pop_back( ) 667void*() 516, 635volatile 495, 497vollständig 486Vorrang 586Vorrangtabelle

für Operatoren 758Vorzeichen 575, 750Vorzeichenoperator 756VT 578

Wwahlfrei

Dateizugriff 547Warteschlange 393, 657, 680

mit Prioritäten 479, 657, 684wcerr 631wcin 631wclog 631wcout 631Wert

boolscher 59größter 752kleinster 752Return 595

Wertebereichfür Datentypen 575

wfilebuf 630wfstream 629what() 449, 507while 590Wide

-Stream-Objekt 391widen() 637width() 527, 637Wiederverwendbarkeit 27, 253wifstream 629wios 629wiostream 629wistream 629wistringstream 629wofstream 629wostream 629wostringstream 629write() 515, 643ws 529, 647wstreambuf 630wstring 465, 612wstringbuf 630wstringstream 629Wurzel

eines Baumes 479

ZZahl

komplexe 205, 717, 719Zahlensystem

kennzeichnen 523

Index 787

Page 88: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

788

Zeichen 575Ausgabe 580ausgeben 585Backslash 577-Code 581Eingabe 583einlesen 584EOF 583form feed 578-Konstante 576Konstante 577Newline 577Steuer- 577Tabulator 578

Zeichenkette 597, 611Zeiger 598

als Parameter 129, 600-Arithmetik 599auf abstrakte Klasse 303auf konstante Objekte 77auf Methoden 191auf Puffer 640auf Struktur 603Element- 191get- 545konstanter 77konstanter auf Konstante 77next- 640Null- 599put- 545Return-Wert 601Seek- 609Subtraktion 600this 125, 185typenloser 604Vergleich 600VMT- 297

Zeileeinlesen 585

Zeilen-Puffer 584

Zerstörenvon Objekten 111, 299

Zugriffauf aktuelles Objekt 125auf Basisklasse 259auf Datenelemente 121auf Elemente von Namensbereichen 347auf Format-Flags 521auf Klassenelemente 101, 105, 269auf Namensbereiche 349auf statische Elemente 185auf Status-Flags 517auf Stringelemente 473expliziter 125sequentieller Datei- 545wahlfreier Datei- 547

Zugriffrecht 271Zugriffs

-Deklaration 271Zugriffsart 605Zugriffsmethode 121, 259Zugriffsoperatoren 757Zugriffsrecht 187, 293, 606

abgeleiteter Klassen 255Zuweisung 163, 237, 587

abgeleiteter Klassen 305abstrakter Klassen 305einfache 587, 756für Bitsets 695mehrfache 587Standard- 307überladen 163virtuelle 305, 307von Deques 671von Listen 676von Maps 690von Objekten 285von Strings 467von Vektoren 666, 733zusammengesetzte 756

Zuweisungsoperator 587Zwischenraumzeichen

entfernen 528, 647überlesen 529

Zwischenspeicher 183

Index

Page 89: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

C/C++, Softwareentwicklung

www.galileocomputing.de

Jürgen WolfC von A bis Z

920 S., 2003, 39,90 EuroISBN 3-89842-392-1

Krüger/Seelmann-EggebertIT-Architektur-Engineering

483 S., 2003, 49,90 Euro ISBN 3-89842-327-1

Arnold WillemerEinstieg in C++

ca. 500 S., 2003, ca. 20,00 EuroISBN 3-89842-397-2

Manfred RätzmannSoftware-Testing

281 S., 2002, 39,90 EuroISBN 3-89842-271-2

Bernhard VolzEinstieg in C#

528 S., 2002, 24,90 EuroISBN 3-89842-265-8

Grässle/Baumann/BaumannUML projektorientiert

288 S., 2003, 29,90 EuroISBN 3-89842-374-3

Kaiser/KecherC/C++

1368 S., 2002, 44,90 EuroISBN 3-89842-273-9

Page 90: Auf einen Blick - bilder.buecher.de · Die C++-Sprachbeschreibung basiert auf dem ANSI-Standard X3J16 des American National Standards Institute, der 1998 als internationaler Standard

Aktuelle Computing-Bücherim Überblick

www.galileocomputing.de

C/C++ & Software-entwicklung

Ulrich KaiserSpieleprogrammierung in C++

U. Kaiser, Ch. Kecher

C/C++

Jürgen Wolf

C von A bis Z

Manfred Rätzmann

Software-Testing

Georg Erwin ThallerSoftwareentwicklung im Team

Krüger, Seelmann-EggebertIT-Architektur-Engineering

Alf Borrmann u.a.Rational Rose und UML

P. Grässle, H. u. P. BaumannUML projektorientiert

Internet & Scripting

Martin KästnerPerl fürs Web

Kai LaborenzCSS-Praxis

Marcus Throll

MySQL 4

Mark LubkowitzWebseiten programmieren und gestalten

Thomas TheisEinstieg in Python

Christian WenzHandbuch JavaScript

Michael HilscherDer eigene Webserver

Axel SchembergPC-Netzwerke

Java

Christian UllenboomJava ist auch eine Insel

Bernhard SteppanEinstieg in Java

MS,.NET

Stefan FellnerVB.NET und Datenbanken

Andreas KühnelVisual C#

Andreas KühnelVB.NET

Hans Willi KremerSELECT * FROM SQL Server 2000

Ulrich SchlüterIntegrationshandbuch Microsoft-Netzwerk

UNIX, XML

Matthias WarkusGNOME 2.0

Arnold WillemerWie werde ich ein UNIX-Guru?

Helmut VonhoegenEinstieg in XML