622
C++ Programmieren mit Stil http://kickme.to/tiger/

(eBook German)C++.Programmieren.mit.Stil

Embed Size (px)

Citation preview

  • ;-_=_Scrolldown to the Underground_=_-;

    C++ Programmieren mit Stil

    http://kickme.to/tiger/

  • Vorige Seite: Eine Ebene hher: Nchste Seite: 1 Vorbemerkungen

    Inhalt

    1 Vorbemerkungen Was das Buch nicht ist m 1.2 Aufbau des Buchs m 1.3 Schreibweisen und Konventionen m 1.4 bungsbeispiele und Entwicklungssysteme m 1.5 Die beigelegte CD m

    l

    2 Einfhrung 2.1 Die Programmiersprache C++

    2.1.1 Grundlagen von C++ n 2.1.2 Die Entwicklung von C++ n

    m

    2.2 Einfache C++-Programme 2.2.1 Das erste Programm: Hello world! n 2.2.2 Variablen und Kontrollstrukturen n 2.2.3 Funktionen n

    m

    l

    3 Lexikalische Elemente von C++ 3.1 Sprachbeschreibung mit Grammatik m 3.2 Bezeichner m 3.3 Schlsselwrter m 3.4 Literale

    3.4.1 Ganze Zahlen n 3.4.2 Fliekommazahlen n 3.4.3 Zeichen n 3.4.4 Zeichenketten n

    m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (1 von 11) [10.09.2000 10:01:17]

  • 3.4.5 Wahrheitswerte n 3.5 Operatoren und Begrenzer

    3.5.1 Operatoren n 3.5.2 Begrenzer n 3.5.3 Alternative Operatoren und Begrenzer n 3.5.4 Kommentare n

    m

    4 Einfache Deklarationen und Basisdatentypen 4.1 Die Begriffe Definition und Deklaration m 4.2 Basisdatentypen

    4.2.1 Der Datentyp bool n 4.2.2 Die Datentypen char und wchar_t n 4.2.3 Die int-Datentypen n 4.2.4 Fliekommadatentypen n 4.2.5 Der Datentyp void n

    m

    4.3 Aufzhlungstypen m 4.4 Deklaration von Konstanten m

    l

    5 Ausdrcke 5.1 Auswertungsreihenfolge m 5.2 LValues und RValues m 5.3 Primre Ausdrcke m 5.4 Postfix-Ausdrcke m 5.5 Unre Ausdrcke m 5.6 Andere Ausdrcke m

    l

    6 Anweisungen 6.1 Ausdrucksanweisung m 6.2 Sprungmarken m 6.3 Blockanweisungen m 6.4 Deklaration m 6.5 Selektion

    Die if else-Anweisung n 6.5.2 Die switch-Anweisung n

    m

    6.6 Iteration 6.6.1 Die while-Anweisung n

    m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (2 von 11) [10.09.2000 10:01:17]

  • Die do while-Anweisung n 6.6.3 Die for-Anweisung n

    6.7 Sprunganweisungen 6.7.1 Die break-Anweisung n 6.7.2 Die continue-Anweisung n 6.7.3 Die return-Anweisung n 6.7.4 Die goto-Anweisung n

    m

    7 Funktionen 7.1 Einfhrung m 7.2 Deklaration und Definition von Funktionen m 7.3 Funktionsaufruf und Parameterbergabe m 7.4 Spezielle Funktionen

    7.4.1 Prozeduren n 7.4.2 Operator-Funktionen n

    m

    7.5 inline-Funktionen m 7.6 Vorbelegte Parameter m 7.7 berladen von Funktionen

    7.7.1 Aufruf von berladenen Funktionen n 7.7.2 berladen versus vorbelegte Parameter n

    m

    7.8 Rekursion m

    l

    8 Hhere Datentypen und strukturierte Datentypen 8.1 Referenzen m 8.2 Grundlegendes zu Zeigern

    8.2.1 Deklaration von Zeigern n 8.2.2 Adrebildung n 8.2.3 Dereferenzierung von Zeigerwerten n 8.2.4 Anlegen von dynamischen Objekten n 8.2.5 Zerstren von dynamisch angelegten Speicherobjekten n 8.2.6 Zeigerkonstanten n 8.2.7 Spezielle Zeigertypen

    void-Zeiger n Zeiger auf Funktionen n

    n

    m

    8.3 Vektoren m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (3 von 11) [10.09.2000 10:01:17]

  • 8.3.1 Vektoren und Zeiger n 8.3.2 Zeigerarithmetik n 8.3.3 Vektoren als Parameter n

    8.4 Zeichenketten m 8.5 Parameterbergabe mit Zeigern und Referenzen

    8.5.1 Call by Value und Call by Reference n 8.5.2 Gegenberstellung der zwei Arten der Parameterbergabe n

    m

    8.6 Strukturierte Datentypen: Klassen 8.6.1 Definition von Klassen n 8.6.2 Die Elementoperatoren . und -> n

    m

    9 Gltigkeitsbereiche, Deklarationen und Typumwandlungen 9.1 Gltigkeitsbereiche, Namensrume und Sichtbarkeit

    9.1.1 Gltigkeitsbereiche n 9.1.2 Namensrume

    Deklaration und Verwendung von Namensrumen n Namenlose Namensrume n

    n

    m

    9.2 Deklarationen 9.2.1 Speicherklassenattribute

    Speicherklasse auto n Speicherklasse register n Speicherklasse static n Speicherklasse extern n Speicherklasse mutable n Der Zusammenhang zwischen Speicherklasse, Lebensdauer und Gltigkeit n

    n

    9.2.2 Typ-Qualifikatoren n 9.2.3 Funktionsattribute n 9.2.4 typedef n

    m

    9.3 Initialisierung m 9.4 Typumwandlungen

    9.4.1 Standard-Typumwandlung LValue-RValue-Typumwandlungen n Vektor-Zeiger-Typumwandlungen n Funktion-Zeiger-Typumwandlungen n

    n

    m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (4 von 11) [10.09.2000 10:01:17]

  • Qualifikations-Typumwandlungen n Integral- und Gleitkomma-Promotionen n Integral- und Gleitkomma-Typumwandlungen n Gleitkomma-Integral-Typumwandlungen n Zeiger-Typumwandlungen n Basisklassen-Typumwandlungen n Bool-Typumwandlungen n

    9.4.2 Explizite Typumwandlung Typumwandlung im C-Stil und im Funktionsstil n Neue Cast-Operatoren n

    n

    10 Module und Datenkapseln 10.1 Motivation m 10.2 Vom Modul zur Datenkapsel m 10.3 Module und Datenkapseln in C++

    10.3.1 Die Schnittstellendatei n 10.3.2 Die Implementierungsdatei n 10.3.3 Modul-Klienten n 10.3.4 Einige Kommentare zu Stack n

    m

    10.4 Resmee m

    l

    11 Das Klassenkonzept 11.1 Motivation

    11.1.1 Klassen als Mittel zur Abstraktion n 11.1.2 Klassen und das Geheimnisprinzip n

    m

    11.2 Element-Funktionen 11.2.1 inline-Element-Funktionen n 11.2.2 const-Element-Funktionen n

    m

    11.3 this-Zeiger m 11.4 Der Zugriffsschutz bei Klassen

    11.4.1 Zugriffsschutz mit public, protected und private n 11.4.2 friend-Funktionen und -Klassen n

    m

    11.5 static-Klassen-Elemente m 11.6 Geschachtelte Klassen m 11.7 Spezielle Element-Funktionen und Operatoren m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (5 von 11) [10.09.2000 10:01:17]

  • 11.7.1 Konstruktoren Objekt-Initialisierung mittels Initialisierungsliste n berladen von Konstruktoren n Der Copy-Konstruktor n

    n

    11.7.2 Destruktoren n 11.7.3 berladen von Operatoren

    Allgemeines zum berladen von Operatoren n Implementierung von speziellen Operatoren n Der Indexoperator [] n Der Operator () n Die Operatoren new, delete n Der Zuweisungsoperator = n Die Ein-/Ausgabeoperatoren >> und

  • Komplexitt n Aufgabenstellung n

    11.9.4 Klasse Calculator Themenbereiche n Komplexitt n Aufgabenstellung n Hintergrundwissen n

    n

    11.9.5 Klasse List Themenbereiche n Komplexitt n Aufgabenstellung n

    n

    11.9.6 Klasse Rational Themenbereiche n Komplexitt n Aufgabenstellung n

    n

    12 Templates 12.1 Motivation m 12.2 Funktions-Templates

    12.2.1 Ausprgung von Funktions-Templates n 12.2.2 berladen von Funktions-Templates n

    m

    12.3 Klassen-Templates 12.3.1 Definition von Klassen-Templates n 12.3.2 Ausprgung von Klassen-Templates n 12.3.3 Geschachtelte Template-Klassen und friend n 12.3.4 Explizite Ausprgung und Spezialisierung n 12.3.5 Template-Typen n

    m

    12.4 Element-Templates m 12.5 Beispiele und bungen

    12.5.1 Funktions-Template binSearch Themenbereich n Komplexitt n Aufgabenstellung n Hintergundwissen n

    n

    m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (7 von 11) [10.09.2000 10:01:17]

  • 12.5.2 List-Template Themenbereich n Komplexitt n Aufgabenstellung n Hintergrundwissen n

    n

    12.5.3 Tree-Template Themenbereich n Komplexitt n Aufgabenstellung n Hintergrundwissen n

    n

    13 Vererbung 13.1 Einfhrung

    13.1.1 Was heit Vererbung? n 13.1.2 Begriffe im Zusammenhang mit Vererbung n

    m

    13.2 Ableiten einer Klasse m 13.3 Die Is-A-Beziehung m 13.4 Vererbung und Gltigkeitsbereiche m 13.5 Element-Funktionen bei abgeleiteten Klassen

    13.5.1 Konstruktoren n 13.5.2 Copy-Konstruktor n 13.5.3 Destruktor n 13.5.4 Zuweisungsoperator n 13.5.5 berschreiben von ererbten Methoden n

    m

    13.6 Spezifikation von Basisklassen m 13.7 Beispiele und bungen

    13.7.1 Klasse Word Themenbereich n Aufgabenstellung n

    n

    m

    l

    14 Polymorphismus und spezielle Aspekte der Vererbung 14.1 Polymorphismus m 14.2 Virtuelle Element-Funktionen

    14.2.1 Deklaration von virtuellen Element-Funktionen n 14.2.2 Aufruf von virtuellen Element-Funktionen n

    m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (8 von 11) [10.09.2000 10:01:17]

  • 14.2.3 Virtuelle Destruktoren n 14.2.4 berschreiben von nicht virtuellen Element-Funktionen n 14.2.5 Is-A-Vererbung als Programming by Contract n 14.2.6 Reprsentation polymorpher Objekte im Speicher n

    14.3 Abstrakte Basisklassen und rein virtuelle Element-Funktionen m 14.4 Mehrfachvererbung m 14.5 Virtuelle Basisklassen m 14.6 Laufzeit-Typinformation

    14.6.1 Typumwandlung mit dynamic_cast n 14.6.2 Der typeid-Operator n 14.6.3 Erweiterung und Einsatz der Typinformation n

    m

    14.7 Beispiele und bungen 14.7.1 Klassenhierarchie Animals

    Themenbereich n Komplexitt n Aufgabenstellung n

    n

    14.7.2 CellWar Themenbereich n Komplexitt n Aufgabenstellung n

    n

    14.7.3 Klassenhierarchie Maze Themenbereich n Komplexitt n Aufgabenstellung n

    n

    14.7.4 Klassenhierarchie Kellerbar Themenbereich n Komplexitt n Aufgabenstellung n

    n

    m

    15 Ausnahmebehandlung 15.1 Motivation m 15.2 Ausnahmebehandlung in C++ m 15.3 Auslsen von Ausnahmen und Ausnahme-Objekte m 15.4 Ausnahme-Handler m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (9 von 11) [10.09.2000 10:01:17]

  • 15.5 Spezifikation von Ausnahmen m 15.6 Unerwartete und nicht behandelte Ausnahmen m 15.7 Ausnahmebehandlung in der Praxis m 15.8 Beispiele und bungen

    15.8.1 Klasse TString II Themenbereich n Komplexitt n Aufgabenstellung n

    n

    15.8.2 Klasse Rational II Themenbereich n Komplexitt n Aufgabenstellung n

    n

    m

    A Ein-/Ausgabe in C++: Streams A.1 Streams als Abstraktion der Ein-/Ausgabe m A.2 Ausgabe m A.3 Eingabe m A.4 Formatierte Ein-/Ausgabe m A.5 Streams und Dateien

    A.5.1 ffnen von Dateien n A.5.2 Lesen und Setzen von Positionen n

    m

    l

    B Prprozessor-Direktiven B.1 Direktiven m B.2 Bedingte bersetzung m

    l

    C Die Funktion main l D Lsungen

    D.1 Mehrfach verwendete Dateien D.1.1 Datei fakeiso.h n D.1.2 Datei globs.h n D.1.3 Klasse TString n D.1.4 Klasse Random n

    m

    D.2 Das Klassenkonzept D.2.1 Klasse Date n D.2.2 Klasse Counter n

    m

    l

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (10 von 11) [10.09.2000 10:01:17]

  • D.2.3 Gltigkeitsbereich, Sichtbarkeit und Lebensdauer n D.2.4 Calculator-Klassen n D.2.5 Klasse List n D.2.6 Klasse Rational n

    D.3 Templates D.3.1 Binr Suchen n D.3.2 List-Template n D.3.3 Klasse Tree n

    m

    D.4 Vererbung D.4.1 Klasse Word n

    m

    D.5 Polymorphismus D.5.1 Animals n D.5.2 CellWar n D.5.3 Maze n D.5.4 Klassenhierarchie Kellerbar

    Die Klasse SimObject n Die Klasse Simulation n Kellner, Getrnke und Gste n Generierung von Ereignissen (Simulationsobjekten) n

    n

    m

    D.6 Ausnahmen D.6.1 Klasse TString II n D.6.2 Die Klasse Rational II n

    m

    E C++-Literatur l F Programmverzeichnis l Literatur l Index l

    (c) Thomas Strasser, dpunkt 1997

    Inhalt

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/NODE3.HTM (11 von 11) [10.09.2000 10:01:17]

  • Vorige Seite: Inhalt Eine Ebene hher: C++ Programmieren mit Stil Nchste Seite: Was das Buchnicht

    1 VorbemerkungenDas vorliegende Buch beschreibt die Programmiersprache C++ nach dem ANSI/ISO-Standard. ZumZeitpunkt der Entstehung dieses Buchs (Sommer/Herbst 1996) ist der Standard allerdings noch nichtverabschiedet. Es gibt daher kein offizielles Dokument, das den endgltigen Standard beschreibt. Alleexistierenden Dokumente sind entweder Draft, das heit vorlufig, oder aber inoffzielle Beschreibungen.Ein Buch ber etwas schreiben zu wollen, das noch nicht existiert, wirft eine Reihe von Problemen auf:Die zur Verfgung stehenden Informationen sind meist vage und unsicher, es stehen noch keineEntwicklungssysteme zur Verfgung, die genau dem kommenden Sprachstandard entsprechen usw.

    Die Bedeutung des Sprachstandards ist aber absehbar. ber kurz oder lang werden alle C++-Compilerdieser Sprachdefinition folgen. Es wre also widersinnig, den existierenden 2147618 Bchern ber C++ein weiteres hinzuzufgen, das nicht auf die kommenden Sprachfeatures eingeht. Zudem sind diewesentlichen neuen Sprachelemente schon seit einiger Zeit bekannt und werden sich nicht mehrverndern.

    Die folgenden Abschnitte sollen kurz in die Thematik und den Aufbau des Buchs einfhren.

    Was das Buch nicht istl 1.2 Aufbau des Buchsl 1.3 Schreibweisen und Konventionenl 1.4 bungsbeispiele und Entwicklungssystemel 1.5 Die beigelegte CDl

    (c) Thomas Strasser, dpunkt 1997

    1 Vorbemerkungen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node4.htm [10.09.2000 10:01:35]

  • Vorige Seite: 1 Vorbemerkungen Eine Ebene hher: 1 Vorbemerkungen Nchste Seite: 1.2 Aufbaudes Buchs

    1.1 Was das Buch nicht ist Als erstes soll erlutert werden, was dieses Buch nicht ist:

    Das Buch ist keine komplette und umfassende Referenz fr die Programmiersprache C++ nachdem ANSI/ISO-Standard .

    Die Standard-Bibliothek von C++ weist inzwischen einen derart groen Umfang auf, da sie nur insehr geringem Ausma bercksichtigt werden konnte (Ein-/Ausgabe).

    Wesentliche Bereiche der Bibliothek wie die unter dem Namen STL (Standard Template Library) bekannten generischen Algorithmen und Datenstrukturen wurden ausgeklammert. Zum Erlernender Programmiersprache und der wesentlichen Konzepte sind sie zum einen nicht notwendig, undzum andern erfordert ihre Komplexitt eine umfangreiche Abhandlung, wie sie in diesem Buchnicht mglich wre.

    Der Schwerpunkt dieses Buchs liegt auf der Vermittlung des (nach Meinung des Autors) frC++-Einsteiger und -Anfnger wesentlichen Wissens.

    l

    Das Buch ist kein Hersteller-spezifisches C++-Lehrbuch, sondern bezieht sich ausschlielich aufden Draft-ANSI/ISO-Standard. Die hier besprochenen Konzepte sind damit auf allenANSI/ISO-kompatiblen Entwicklungssystemen gltig, die hier gebrachten Programme knnenunabhngig von Compiler und Plattform bersetzt werden (vorausgesetzt, der Compiler entsprichtdem Standard).

    l

    Das Buch setzt keine C-Kenntnisse des Lesers voraus. Der Autor ist der Meinung, da C++ eineeigenstndige Programmiersprache ist, die auch als solche gelehrt werden sollte. C-Kenntnissesind ntzlich, aber nicht erforderlich.

    l

    Das Buch konzentriert sich zudem ausschlielich auf den Bereich der Programmierung. AndereThemenbereiche wie etwa die Objektorientierte Analyse, der Entwurf von objektorientiertenSystemen oder Entwurfsmuster (Design Patterns) werden in diesem Buch daher nicht erlutert.

    l

    Weiterfhrende Themen wie Handles, Master Pointer, Speichermanagement und dergleichenwerden ebenfalls nicht behandelt. Diese Themenbereiche haben eine andere Zielgruppe und setzenein bereits gefestigtes Wissen um die Sprache C++ voraus.

    l

    Was das Buch nicht

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node5.htm (1 von 2) [10.09.2000 10:01:38]

  • Die in Anhang E angefhrte bersicht bietet dem Leser eine (subjektive) Auswahl von C++-Titeln, dieauch weiterfhrende Themenbereiche abdecken.

    Vorige Seite: 1 Vorbemerkungen Eine Ebene hher: 1 Vorbemerkungen Nchste Seite: 1.2 Aufbaudes Buchs (c) Thomas Strasser, dpunkt 1997

    Was das Buch nicht

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node5.htm (2 von 2) [10.09.2000 10:01:38]

  • Vorige Seite: 1.1 Was das Buch nicht Eine Ebene hher: 1 Vorbemerkungen Nchste Seite: 1.3Schreibweisen und Konventionen

    1.2 Aufbau des Buchs Der Aufbau dieses Buchs unterscheidet sich bewut von dem der meisten anderen C++-Lehrbcher.Durch seine Konzeption als Lehrbuch fr C++-Einsteiger ist es unabhngig von den verschiedenenEntwicklungssystemen und -plattformen. Im Vordergrund steht nicht das Entwicklungssystem XY derFirma Z, sondern vielmehr die Sprache C++.

    Dabei wurde versucht, das Buch nach einem alten sterreichischen Schilehrer-Grundsatz (,,VomEinfachen zum Komplexen``) zu gliedern. Die ersten Kapitel beschftigen sich daher mit den,,einfachen`` Aspekten der Sprache: Sprachelemente & Grammatik, Basisdatentypen, Ausdrcke und soweiter bis hin zu C++-Modulen. Diese Grundlagen mgen zwar (vor allem fr Leser mit C-Erfahrung)langatmig erscheinen, doch eine grndliche und fr den Leser nutzbringende Abhandlung derwesentlichen Konzepte ist nur mglich, wenn die ,,einfachen`` Sprachelemente klar erlutert sind.

    Leser, die schon ber entsprechende Erfahrungen verfgen, knnen sich bei den einfhrenden Kapiteln(Kapitel 2 bis einschlielich 6) auf eine auszugsweise Lektre beschrnken.

    Im Detail ist das Buch wie folgt aufgebaut: Kapitel 2 bringt eine kurze Einfhrung in die Sprache C++ anhand von einigen kleinenProgrammen. Im Vordergrund steht dabei nicht die Erluterung von Sprachkonzepten, sondernvielmehr die Vorstellung des Schemas von einfachen C++-Programmen.

    Diese einfachen Programme knnen vom Leser abgendert und getestet werden. So ist er in derLage, von Anfang an Codebeispiele besser verstehen und eigene kleine Programme erstellen zuknnen.

    l

    Kapitel 3 beschreibt, aus welchen Zeichen und Zeichenfolgen (lexikalischen Elementen)C++-Programme aufgebaut sind.

    l

    Kapitel 4 stellt die grundlegenden Datentypen von C++ vor. Auf diesen einfachen Datentypenbauen die hheren und strukturierten Datentypen auf.

    l

    Datenelemente werden in Ausdrcken, die aus Operanden und Operatoren bestehen, verarbeitet. Inl

    1.2 Aufbau des Buchs

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node6.htm (1 von 3) [10.09.2000 10:01:41]

  • Kapitel 5 werden die verschiedenen Arten von Ausdrcken sowie die einzelnen Operatorenvorgestellt. Grundelemente von C++-Programmen sind Anweisungen. Anweisungen enthalten Ausdrcke,deklarieren Objekte und steuern den Ablauf von Programmen. Kapitel 6 beschreibt dieverschiedenen Arten von Anweisungen.

    l

    Eine spezielle Anweisung ist die Funktionsanweisung. Sie ist das erste (und einfachste)Strukturierungs- und Abstraktionsmittel von C++ und fat mehrere Anweisungen zu einer,,Super-Anweisung`` zusammen. Kapitel 7 beschreibt Funktionen im Allgemeinen sowieverschiedene C++-Spezifika wie Operator-Funktionen, das Konzept des berladens odervorbelegte Funktionsparameter.

    l

    Aufbauend auf diesen Kapiteln werden in Kapitel 8 die hheren Datentypen (Referenzen, Zeigerund Vektoren) im Detail besprochen. Neben den eigentlichen Datentypen steht dabei auch ihrEinsatz (zum Beispiel die Verwendung von Referenzen bei der Parameterbergabe) imVordergrund. Auch die strukturierten Datentypen (Klassen) werden berblicksmig besprochen.

    l

    Kapitel 9 vertieft einige bisher nur oberflchlich behandelte Aspekte: Gltigkeitsbereiche,Deklarationen und die verschiedenen Mglichkeiten der Typumwandlung in C++.

    l

    Der ,,traditionelle`` Teil des Buchs wird durch einen Abschnitt ber die modulbasierteProgrammierung in C++ beschlossen (Kapitel 10). Das Kapitel beschreibt die Realisierung vonModulen in C++ und betont insbesonders die Bedeutung des Geheimnisprinzips.

    l

    Kapitel 11 ist das ,,Kernkapitel`` des Buchs und erlutert das Klassenkonzept. Die Realisierungvon Klassen und Themenbereiche wie Speichermanagement, berladen von Operatoren,kanonische Form von Klassen etc. werden in diesem Kapitel anhand eines durchgngigenBeispiels demonstriert.

    l

    Kapitel 12 beschreibt das Konzept der Generizitt in C++. Besprochen werden generischeFunktionen (Funktions-Templates) und Klassen (Klassen-Templates).

    l

    Kapitel 13 zeigt die Realisierung von Vererbung in C++. Dabei stehen zunchst nur die,,statischen`` Aspekte der Vererbung im Vordergrund.

    l

    Darauf aufbauend werden in Kapitel 14 die dynamischen Aspekte (Polymorphismus, AbstrakteBasisklassen) sowie verschiedene andere weiterfhrende Themenbereiche(Laufzeit-Typinformation, Mehrfachvererbung) besprochen.

    l

    Kapitel 15 beschliet das Buch mit einer Beschreibung des Konzepts der Ausnahmebehandlung. l In den Anhngen sind verschiedene ergnzende Abschnitte angefhrt, die vom Leser je nach Bedarfdurchgearbeitet werden knnen:

    Anhang A stellt die Ein-/Ausgabe in C++ kurz und berblicksweise vor. l Anhang B beschreibt den C++-Prprozessor. l Anhang C behandelt die ,,Hauptfunktion`` von C++-Programmen sowie die Parameterbergabe andiese.

    l

    Anhang E fhrt in einer kurzen bersicht eine Reihe von empfehlenswerten C++-Bchern an. l

    1.2 Aufbau des Buchs

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node6.htm (2 von 3) [10.09.2000 10:01:41]

  • Vorige Seite: 1.1 Was das Buch nicht Eine Ebene hher: 1 Vorbemerkungen Nchste Seite: 1.3Schreibweisen und Konventionen (c) Thomas Strasser, dpunkt 1997

    1.2 Aufbau des Buchs

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node6.htm (3 von 3) [10.09.2000 10:01:41]

  • Vorige Seite: 1.2 Aufbau des Buchs Eine Ebene hher: 1 Vorbemerkungen Nchste Seite: 1.4bungsbeispiele und Entwicklungssysteme

    1.3 Schreibweisen und KonventionenSchreibweisen wie zum Beispiel der Anwender werden in einer allgemeinen und geschlechtsneutralenBedeutung verwendet.

    Kursive Schreibweisen heben Begriffe hervor.

    Englischsprachige Begriffe sind ebenfalls kursiv gedruckt. Setzen sie sich aus mehreren Wrternzusammen, so werden sie nicht durch Bindestriche verbunden (Call by Value anstelle vonCall-by-Value).Codestcke und Schlsselwrter sind im Zeichensatz Typewriter gesetzt.

    Zitate erfolgen wie blich unter Angabe der entsprechenden Seitenzahlen. Lediglich in den entsprechendaufbereiteten Quellen werden die Stellen ber logische Namen angegeben (zum Beispiel [ISO95,dcl.dcl]), da diese unabhngig von den konkreten Seitenzahlen sind. Eine weitere Bemerkung zu[ISO95]: Diese Draft-Version des C++-Standards ist im Gegensatz zur Version vom Dezember 1996 freiverfgbar. Wo immer mglich wird daher diese Version des Standards zitiert.

    Zwei besondere Absatzformate sind zu erwhnen. Beide kennzeichnen spezielle Sachverhalte und sinddurch eine Grafik am ueren Rand und durch eine Einrckung nach auen vom restlichen Textabgegrenzt:

    Wird im Text auf eine Tatsache besonders hingewiesen, so ist derentsprechende Textabschnitt durch ein Ausrufezeichen am Rand speziellgekennzeichnet.

    Spezielle Tips hingegen werden durch seitliche ,,Striche`` markiert. ImGegensatz zu den Anmerkungen sind diese Tips ,,subjektive`` Hinweisedes Autors.

    1.3 Schreibweisen und Konventionen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node7.htm (1 von 2) [10.09.2000 10:01:46]

  • Vorige Seite: 1.2 Aufbau des Buchs Eine Ebene hher: 1 Vorbemerkungen Nchste Seite: 1.4bungsbeispiele und Entwicklungssysteme(c) Thomas Strasser, dpunkt 1997

    1.3 Schreibweisen und Konventionen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node7.htm (2 von 2) [10.09.2000 10:01:46]

  • Vorige Seite: 1.3 Schreibweisen und Konventionen Eine Ebene hher: 1 Vorbemerkungen NchsteSeite: 1.5 Die beigelegte CD

    1.4 bungsbeispiele undEntwicklungssysteme Programmieren erlernt man nicht durch das Studium von Bchern oder Handbchern, sondern nur durchbung. Dieses Buch ist lediglich ein ,,Hilfsmittel`` und bereitet die Programmiersprache C++ fr denLeser auf. Die Umsetzung der Konzepte bei konkreten Problemstellungen aber obliegt dem Leser.

    Um Mglichkeiten der Umsetzung und die Anwendung der besprochenen Konzepte aufzuzeigen, werdendaher bungsbeispiele verwendet. Dabei handelt es sich weder um theoretische Fragen bezglich Syntaxoder andere Problembereiche von C++ noch um umfangreiche Beispiele, deren Lsungen nurauszugsweise angefhrt werden knnen.

    Vielmehr werden Beispiele verwendet, deren konkrete (und vor allem vollstndige) Lsungen dem Leserdie Anwendung der besprochenen Sprachkonzepte zeigen.

    bungsaufgaben werden ab Kapitel 11 (Klassen) gestellt und sind durch kurze Angaben, die bewutvage und offen gehalten sind, spezifiziert. Die Angaben geben dem Leser damit groen Freiraum inbezug auf die Realisierung. Jedes einzelne Beispiel ist vollstndig in dem Sinne, da eine Klasse odereine Reihe von Klassen inklusive Testprogramm zu erstellen ist.

    Die Aufgabenstellungen stammen aus Programmierkursen im universitren und aueruniversitrenBereich und wurden in den abgebildeten Formen von Kursteilnehmern gelst.

    In der elektronischen Version des Buchs, die auf der beigelegten CD enthalten ist, werden die Lsungender Beispiele diskutiert. Dazu werden eine allgemeine Lsungsidee sowie Auszge aus den wesentlichenPassagen der Lsung angefhrt. Die vollstndigen Lsungen sind ebenfalls auf der mitgelieferten CDenthalten.

    Die einzelnen Aufgaben sind bewut allgemein gehalten und sollten auf jedemC++-Entwicklungssystem, das dem ANSI/ISO-Standard weitgehend entspricht, bersetzt werdenknnen.

    1.4 bungsbeispiele und Entwicklungssysteme

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node8.htm (1 von 2) [10.09.2000 10:01:48]

  • Zu beachten ist, da die angefhrten Lsungen keineswegs die idealen Lsungen der Beispieledarstellen. Sie sind vielmehr mgliche Lsungen, die dem Leser zeigen sollen, wie bestimmte Konzepteumgesetzt werden knnen.

    Da es sich bei allen Aufgaben um vollstndige Beispiele handelt, kann der Leser experimentieren: Erkann die Dateien bersetzen und abndern, er kann die Programme ausfhren oder debuggen und so dengenauen Ablauf verfolgen.

    Vorige Seite: 1.3 Schreibweisen und Konventionen Eine Ebene hher: 1 Vorbemerkungen NchsteSeite: 1.5 Die beigelegte CD (c) Thomas Strasser, dpunkt 1997

    1.4 bungsbeispiele und Entwicklungssysteme

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node8.htm (2 von 2) [10.09.2000 10:01:48]

  • Vorige Seite: 1.4 bungsbeispiele und Entwicklungssysteme Eine Ebene hher: 1 VorbemerkungenNchste Seite: 2 Einfhrung

    1.5 Die beigelegte CDDem Buch liegt eine CD bei, die folgende Informationen enthlt:

    Alle bungsbeispiele sind auf der CD vollstndig aufgefhrt.l Das gesamte Buch ist auf der CD in Hypertext-Form (HTML) enthalten. Mit Hilfe vonWWW-Browsern (zum Beispiel Netscapes Navigator oder Microsofts Explorer) kann dieseVersion als eine Art Online-Manual benutzt werden.

    Die HTML-Version umfat verschiedene Informationen, die im Buch nicht angefhrt sind. So sinddie Beispielprogramme vollstndig (und nicht nur auszugweise) enthalten, verschiedeneReferenzen geben interessante Adressen im Internet an etc.

    l

    Auf der CD sind verschiedene Versionen des Netscape Navigator (Windows, Unix, Macintosh)enthalten. Der Navigator darf ausschlielich offline und zum Lesen der beigelegtenHTML-Version des Buchs verwendet werden. Jegliche Zuwiderhandlung stellt einen Bruch desLizenzabkommens dar!

    l

    (c) Thomas Strasser, dpunkt 1997

    1.5 Die beigelegte CD

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node9.htm [10.09.2000 10:01:51]

  • Vorige Seite: 1.5 Die beigelegte CD Eine Ebene hher: C++ Programmieren mit Stil Nchste Seite:2.1 Die Programmiersprache C++

    2 EinfhrungDieses Kapitel gibt einen kurzen berblick ber die Entwicklung von C++ und fhrt anschlieendanhand von einigen kleinen Beispielen grob und unvollstndig in die allgemeine Struktur vonC++-Programmen ein. Dieser Abschnitt soll helfen, die verwendeten Programmbeispiele in den erstenKapiteln besser verstehen zu knnen.

    2.1 Die Programmiersprache C++2.1.1 Grundlagen von C++m 2.1.2 Die Entwicklung von C++m

    l

    2.2 Einfache C++-Programme2.2.1 Das erste Programm: Hello world!m 2.2.2 Variablen und Kontrollstrukturenm 2.2.3 Funktionenm

    l

    (c) Thomas Strasser, dpunkt 1997

    2 Einfhrung

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node10.htm [10.09.2000 10:01:56]

  • Vorige Seite: 2 Einfhrung Eine Ebene hher: 2 Einfhrung Nchste Seite: 2.1.1 Grundlagen von C++

    2.1 Die Programmiersprache C++Die folgenden zwei Abschnitte beschreiben kurz und berblicksmig die Programmiersprache C++sowie ihre Entwicklung.

    2.1.1 Grundlagen von C++l 2.1.2 Die Entwicklung von C++l

    (c) Thomas Strasser, dpunkt 1997

    2.1 Die Programmiersprache C++

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node11.htm [10.09.2000 10:01:58]

  • Vorige Seite: 2.1 Die Programmiersprache C++ Eine Ebene hher: 2.1 Die Programmiersprache C++ Nchste Seite: 2.1.2Die Entwicklung von

    2.1.1 Grundlagen von C++C++ wurde von Bjarne Stroustrup [Str92] entwickelt und basiert auf der Programmiersprache C, die Anfang der siebziger Jahre(1971) fr das Betriebssystem UNIX entwickelt wurde und Bestandteil dessen Programmierumgebung ist. Die klassischeC-Sprachdefinition wurde 1978 von Brian Kernighan und Dennis Ritchie vorgelegt [KR78], fnf Jahre spter begannen dasAmerican National Standards Institute (ANSI) und die International Standardization Organization (ISO) einen neuen Standardfestzulegen.

    Die zweite Grundlage fr C++ ist Simula67. Von dieser Sprache wurde das Klassenkonzept mit abgeleiteten Klassen undvirtuellen Funktionen entliehen.

    Die Grnde, warum Stroustrup C als Basissprache fr C++ whlte, sind:C ist vielseitig und prgnant.l C ist effizient.l C eignet sich fr die meisten Aufgaben in der Systemprogrammierung.l C ist auf praktisch allen Rechnersystemen verfgbar und einfach portierbar.l C ist Bestandteil der UNIX-Programmierumgebung.l Es existiert eine Vielzahl an Bibliotheksroutinen und Software-Utilities, die in C geschrieben sind und von C++ genutztwerden knnen.

    l

    C++ ist daher weitgehend kompatibel zu C. Die Kompatibilitt zu C hat aber nicht nur Vorteile, wie Programm 2.1 zeigt.

    v,i,j,k,l,s,a[99];main() { for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=iDieses Programm lst das Problem der acht Damen, funktioniert aber auch mit 4-99 Damen. Als ,,Damenproblem`` wird dieAufgabe bezeichnet, acht Damen so auf einem Schachbrett zu plazieren, da keine der Damen eine der anderen ,,schlagenkann``.

    Das Programm ist ein durchaus legales C-Programm:,,The authors note, that they use 'no preprocessor statements and no ifs, breaks, cases, functions, gotos, structuresIn short, it contains no C language that might confuse the innocenter'.`` [Lib93, S. 301]

    Tatschlich ist das Programm 1990 als Sieger beim jhrlichen Obfuscated C Code Contest hervorgegangen - Kategorie BestSmall Program.

    2.1.1 Grundlagen von C++

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node12.htm (1 von 2) [10.09.2000 10:02:00]

  • Stroustrup ist fr die enge Anlehnung von C++ an C oft und hart kritisiert worden. Der Erfolg von C++ aber besttigt dieseEntscheidung.

    Vorige Seite: 2.1 Die Programmiersprache C++ Eine Ebene hher: 2.1 Die Programmiersprache C++ Nchste Seite: 2.1.2Die Entwicklung von

    (c) Thomas Strasser, dpunkt 1997

    2.1.1 Grundlagen von C++

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node12.htm (2 von 2) [10.09.2000 10:02:00]

  • Vorige Seite: 2.1.1 Grundlagen von C++ Eine Ebene hher: 2.1 Die Programmiersprache C++

    2.1.2 Die Entwicklung von C++ 1979 begann Bjarne Stroustrup seine Arbeit an C with Classes als ein Resultat seiner Probleme imZusammenhang mit einer groen Simulationsaufgabe, die in Simula entwickelt wurde. C with Classeswar eine erweiterte Version von C, die zustzlich folgende Sprachelemente umfate:

    Klassen l Vererbung ohne Polymorphismus l Konstruktoren und Destruktoren l Funktionen l friend-Deklarationen l Typprfung l

    Die Implementierung von C with Classes bestand in einem Prprozessor, der C with Classes-Programmein C-Programme bersetzte.

    Ab 1982 fhrte Stroustrup die Entwicklung von C with Classes fort. Der Entwicklungsproze mndeteschlielich in der Version 3.0 von C++, die den im The Annotated C++ Reference Manual (ARM)[ES90] beschriebenen Sprachstandard implementierte. C++ umfate in dieser Version folgende neueFeatures:

    Virtuelle Funktionen l berladen von Funktionen und Operatoren l Referenzen l Konstanten l Speichermanagement l Templates l

    Im Jahr 1991 fand das erste Treffen der ISO Workgroup 21 statt. Die Arbeit desStandardisierungs-Komitees mndete 1995 in einem sogenannten Draft Standard [ISO95]. Im Laufe desJahres 1998 wird der endgltige Standard erwartet. Gegenber der Version 3.0 wurde C++ imwesentlichen um folgende Features erweitert:

    Ausnahmebehandlung (Exception Handling) l Laufzeit-Typinformationssystem (Run-Time Typ Information) l

    2.1.2 Die Entwicklung von

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node13.htm (1 von 2) [10.09.2000 10:02:07]

  • Namensrume (Name Spaces) l Neue Mglichkeiten der Typumwandlung l

    Basis fr dieses Buch sind der letzte verfgbare Draft-C++-Standard [ISO95] sowie verschiedene (nicht,,offizielle``) Dokumente, die diesen Standard betreffen.

    Vorige Seite: 2.1.1 Grundlagen von C++ Eine Ebene hher: 2.1 Die Programmiersprache C++ (c)Thomas Strasser, dpunkt 1997

    2.1.2 Die Entwicklung von

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node13.htm (2 von 2) [10.09.2000 10:02:07]

  • Vorige Seite: 2.1.2 Die Entwicklung von Eine Ebene hher: 2 Einfhrung Nchste Seite: 2.2.1 Daserste Programm: Hello world!

    2.2 Einfache C++-ProgrammeDie im folgenden angefhrten einfachen C++-Programme sollen dem Leser ber die ,,Tristheit`` derGrundlagen in den ersten Kapiteln hinweghelfen. Sie sollen ihm ermglichen, kleine und einfacheTestprogramme zu erstellen. Dabei ist es nicht notwendig, da jede Anweisung der Beispielprogrammebis ins letzte Detail verstanden wird.

    Im einfachsten Fall besteht ein C++-Programm aus einer Textdatei, die den Programmcode (Source)enthlt. Diese Datei mu vom Compiler bersetzt werden. Der Compiler erzeugt dabei ein sogenanntesObject File. Ein Object File enthlt die fr den Computer ,,bersetzten`` Informationen derProgrammdatei. In der Regel ist der Name eines Object Files gleich dem Namen des Source Files mit derEndung .obj (MSDOS, Windows oder OS/2) beziehungsweise .o (Unix).Object Files knnen noch nicht ausgefhrt werden. Jedes Programm bentigt bestimmte spezielleCodeteile fr die Ausfhrung, die nicht extra vom Programmierer erstellt werden mssen. Auerdemwird in Programmen im Allgemeinen eine Reihe von bereits vordefinierten Funktionen und anderenObjekten verwendet, deren Definitionen nicht im Source File enthalten sind (zum Beispiel dieEin-/Ausgaben). Diese sind in bereits fertig bersetzten Teilen, den sogenannten ,,Bibliotheken``(Libaries) abgelegt.Anmerkung: Der Begriff ,,Objekt`` wird in den ersten Kapiteln nicht im objektorientierten Sinneverwendet. Vielmehr bezeichnet ,,Objekt`` vorerst ganz allgemein ein ,,Ding`` im Speicher.Um aus einem Object File ein ausfhrbares Programm zu machen, ist es daher ntig, dieses mit denbentigten Bibliotheken zu linken (Deutsch: binden). Erst durch diesen Schritt wird ein ausfhrbaresProgramm erzeugt.

    2.2.1 Das erste Programm: Hello world!l 2.2.2 Variablen und Kontrollstrukturenl 2.2.3 Funktionenl

    2.2 Einfache C++-Programme

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node14.htm (1 von 2) [10.09.2000 10:02:10]

  • Vorige Seite: 2.1.2 Die Entwicklung von Eine Ebene hher: 2 Einfhrung Nchste Seite: 2.2.1 Daserste Programm: Hello world!

    (c) Thomas Strasser, dpunkt 1997

    2.2 Einfache C++-Programme

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node14.htm (2 von 2) [10.09.2000 10:02:10]

  • Vorige Seite: 2.2 Einfache C++-Programme Eine Ebene hher: 2.2 Einfache C++-Programme Nchste Seite: 2.2.2 Variablenund Kontrollstrukturen

    2.2.1 Das erste Programm: Hello world!Wie bereits oben erwhnt, kann ein C++-Programm aus einer einzelnen Datei bestehen, die die ,,Hauptfunktion`` main undgegebenenfalls weitere Funktionen enthlt. main wird beim Start eines C++-Programms automatisch aktiviert.

    Das traditionell erste zu erstellende C++-Programm (und zugleich eines der einfachsten) gibt den Text ,,Hello world` aus:

    //File: hello.cpp // Hello World

    // Schnittstelle von iostream inkludieren // iostream ist ein vordefiniertes Modul, daher wird // der Name mit den Zeichen begrenzt#include

    // "Hauptprogramm"void main(){ cout > Argument;

    Dabei wird der Wert des Arguments unter Verwendung des Operators >> (,,lesen von``, get from) vomStandard-Eingabestrom cin, also von der Tastatur, eingelesen.

    Die Ausgabe erfolgt mit Anweisungen der Artcout

  • Sowohl Eingabeoperator >> wie auch Ausgabeoperator > "Hello" >> " " >> "world!";

    Vorige Seite: 2.2 Einfache C++-Programme Eine Ebene hher: 2.2 Einfache C++-Programme Nchste Seite: 2.2.2 Variablenund Kontrollstrukturen

    (c) Thomas Strasser, dpunkt 1997

    2.2.1 Das erste Programm:

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node15.htm (2 von 2) [10.09.2000 10:02:11]

  • Vorige Seite: 2.2.1 Das erste Programm: Hello world! Eine Ebene hher: 2.2 Einfache C++-Programme NchsteSeite: 2.2.3 Funktionen

    2.2.2 Variablen und Kontrollstrukturen Das folgende Programm lst eine Gleichung der Form ax2+bx +c = 0. Das Programm liest die Koeffizienten a, b und c ein undermittelt anschlieend das Ergebnis.

    Die Lsung einer derartigen Gleichung kann nach der Formel x1,2 = -0.5*p sqrt((0.5*p)2 - q) erfolgen, wobei sich p und q ausder umgeformten Gleichung ergeben (p = b/a, q = c/a) und sqrt die Quadratwurzelfunktion darstellt:

    #include #include

    void main(){ float a, b, c; float help, diskr;

    cout c;

    // Loesung wenn a!=0 if (a!=0) { help=-0.5*b/a; diskr=help*help-c/a; if (diskr==0) { // Eine (reelle) Loesung cout

  • cout tag >> monat >> jahr;cin >> trennZeichen;

    cout

  • Vorige Seite: 2.2.2 Variablen und Kontrollstrukturen Eine Ebene hher: 2.2 Einfache C++-Programme

    2.2.3 Funktionen Programm 2.4 berechnet einen ,,Turm`` und gibt ihn aus. Dabei wird eine Zahl eingelesen und anschlieend mit zweimultipliziert. Das Ergebnis wird ausgeben und mit drei multipliziert. Dies wird bis zur Zahl 9 wiederholt, anschlieend erfolgenDivisionen durch 2 bis 9. Das Ergebnis ist wiederum die Ausgangszahl. Der Turm ist ,,formatiert`` auszugeben, die Eingabe derZahl 0 soll das Programm beenden. Negative Eingaben sind nicht zulssig.

    In diesem Programm werden bereits die wichtigsten Kontrollstrukturen verwendet: Bedingungsanweisungen (if) und Schleifen(for, while, do).

    Die formatierte Ein-/Ausgabe erfolgt ber die Module iostream und die Funktion setw des Moduls iomanip.

    #include

    // iomanip-Modul erlaubt das Festsetzen der // Feldlaenge bei der Ausgabe#include

    // Funktion berechneTurm, berechnet u. gibt einen // "Turm" basierend auf der Zahl num ausvoid berechneTurm(int num){ // Vereinbarung der lokalen Variablen long help = num;

    // Multiplikation der Zahlen, for-Schleife: // die Variable opnd wird mit 2 initialisiert. // Dann wird der Schleifenrumpf durchlaufen (alle // Anweisungen zwischen { und }) und opnd erhoeht. // Anschliessend wird geprueft, ob opnd < 10 ist. // Falls ja, dann wird der Schleifenrumpf abermals // durchlaufen ... for (int opnd=2; opnd

  • // Division der Zahlen, for-Schleife for (int opnd=2; opnd
  • Die erste Schleife (die ,,uere`` Schleife) enthlt eine zweite Schleife (die ,,innere``) sowie eine if-Anweisung. Dieuere Schleife ist eine sogenannte do-Schleife, die alle Anweisungen zwischen dem folgenden { und demabschlieenden } wiederholt, solange die dahinter angefhrte Bedingung (num > 0) gilt. Die Prfung der Bedingungerfolgt jeweils nach der Ausfhrung dieser Anweisungen.

    l

    Die innere while-Schleife wiederholt die enthaltenen Anweisungen solange die gelesene Zahl kleiner 0 ist. l Die Bedingungsanweisung if (num > 0) { } fhrt die enthaltenen Anweisungen dann aus, wenn num grer 0 ist. l

    Vorige Seite: 2.2.2 Variablen und Kontrollstrukturen Eine Ebene hher: 2.2 Einfache C++-Programme (c) Thomas Strasser,dpunkt 1997

    2.2.3 Funktionen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node17.htm (3 von 3) [10.09.2000 10:02:13]

  • Vorige Seite: 2.2.3 Funktionen Eine Ebene hher: C++ Programmieren mit Stil Nchste Seite: 3.1Sprachbeschreibung mit Grammatik

    3 Lexikalische Elemente von C++Dieses Kapitel befat sich mit den Symbolen, aus denen (gltige) C++-Programme bestehen. Um denkonkreten Aufbau dieser Symbole exakt zu beschreiben, wird, hnlich wie in natrlichen Sprachen, eineGrammatik verwendet.

    Diese Grammatik wird zunchst dargelegt, dann erfolgt die Beschreibung der verschiedenen Symbole.C++ kennt folgende Arten von Symbolen:

    Bezeichnerl Schlsselwrterl LiteraleGanze Zahlen, Fliekommazahlen, Zeichen, Zeichenketten, Wahrheitswerte

    l

    Operatoren und Begrenzerl Kommentarel

    3.1 Sprachbeschreibung mit Grammatikl 3.2 Bezeichnerl 3.3 Schlsselwrterl 3.4 Literale

    3.4.1 Ganze Zahlenm 3.4.2 Fliekommazahlenm 3.4.3 Zeichenm 3.4.4 Zeichenkettenm 3.4.5 Wahrheitswertem

    l

    3.5 Operatoren und Begrenzer3.5.1 Operatorenm 3.5.2 Begrenzerm

    l

    3 Lexikalische Elemente von

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node18.htm (1 von 2) [10.09.2000 10:02:14]

  • 3.5.3 Alternative Operatoren und Begrenzerm 3.5.4 Kommentarem

    (c) Thomas Strasser, dpunkt 1997

    3 Lexikalische Elemente von

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node18.htm (2 von 2) [10.09.2000 10:02:14]

  • Vorige Seite: 3 Lexikalische Elemente von Eine Ebene hher: 3 Lexikalische Elemente von NchsteSeite: 3.2 Bezeichner

    3.1 Sprachbeschreibung mit GrammatikEs gibt verschiedene Mglichkeiten, zu beschreiben, wie ein ,,richtiges`` Programm aussieht und auswelchen Symbolen es zusammengesetzt ist. Eine Variante ist zum Beispiel die Aufzhlung allerkorrekten Programme, eine zweite die verbale Erklrung von Regeln , nach denen Programme aufgebautsind.

    Die erste Mglichkeit ist nicht umsetzbar, da die Menge aller mglichen Programme unendlich gro ist.Auch die zweite ist nicht zufriedenstellend, da sie zu umstndlichen und oft nicht eindeutigenErklrungen fhrt.

    In der Informatik bedient man sich daher einer dritten Mglichkeit, der Beschreibung einerProgrammiersprache durch eine formale Grammatik. Die Grammatik einer Programmiersprache besteht(analog der Grammatik von natrlichen Sprachen) aus einer Menge von Regeln, die angibt, wie dieeinzelnen Stze (Anweisungen), aus denen sich ein Programm zusammensetzt, aufgebaut sein mssen.Eine Regel besteht aus einem zu definierenden Symbol, gefolgt von einem Doppelpunkt und derDefinition des Symbols. Alle Symbole einer Grammatik, die auf der linken Seite einer Regel (= vor demDoppelpunkt) erscheinen, werden als Non-Terminalsymbole bezeichnet, Symbole, die ausschlielich aufder rechten Seite vorkommen, als Terminalsymbole .

    Dazu ein kurzes und unvollstndiges Beispiel:

    Name:

    Buchstabe

    Name Buchstabe

    Buchstabe: one of

    a b c d e f g h i j k l m n o p q r s t u v w x y z

    Zahl:

    Vorzeichenopt Ziffernfolge

    3.1 Sprachbeschreibung mit Grammatik

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node19.htm (1 von 3) [10.09.2000 10:02:14]

  • Vorzeichen: one of

    + -

    Ziffer: one of

    0 1 2 3 4 5 6 7 8 9

    Ziffernfolge:

    Ziffer

    Ziffernfolge Ziffer

    Die Erklrung zur oben angefhrten Grammatik:Ein Name ist entweder ein Buchstabe oder eine Aneinanderreihung (Sequenz) von einem Namengefolgt von einem Buchstaben. Die ,,Entweder-Oder``-Beziehung ergibt sich aus der Anfhrungder beiden um eine Ebene eingerckten Vereinbarungen. Ist eine Vereinbarung lnger als eineZeile, so werden die folgenden Zeilen weiter eingerckt (wie im Fall von Buchstabe).

    l

    Ein Buchstabe ist eines der dahinter angefhrten Symbole (one of, einer von): a, b z.l Eine Zahl ist ein optionales Vorzeichen gefolgt von einer Ziffernfolge. Optional bedeutet, da sichvor einer Ziffernfolge genau ein oder kein Vorzeichen befinden kann.

    l

    Ein Vorzeichen ist entweder ein + oder ein -.l Eine Ziffer ist eines der dahinter angefhrten Symbole (0 9).l Eine Ziffernfolge ist entweder eine Ziffer oder aber eine Ziffernfolge gefolgt von einer Ziffer.l

    Gltige Stze lassen sich durch Anwendung der Regeln der Grammatik bilden beziehungsweise auf das,,Wurzelsymbol`` zurckfhren. Ein Beispiel fr einen gltigen (= der Grammatik entsprechenden)Namen ist abcdef:

    f ist ein Buchstabe, der vordere Teil des Satzes (abcde) ist ein Name (Name Buchstabe).l Der Name abcde kann wiederum in einen Buchstaben (e) und einen Namen (abcd) zerlegtwerden.

    l

    Der Name abcd wird so lange auf die Folge von Name Buchstabe zurckgefhrt, bisschluendlich der Buchstabe a brigbleibt, der auf Name zurckgefhrt werden kann.

    l

    Ebenso sind a und abba gltige Namen und +1234, 98 oder -98 gltige Zahlen. 1a, _ABC oder 12sind hingegen keine gltigen Namen.

    Zwei Anmerkungen zur verwendeten Grammatik:Die hier verwendete Beschreibungsform einer Grammatik geht auf [ISO95] beziehungsweise[Str92] zurck und stellt an und fr sich keine der ,,blichen`` wissenschaftlichenBeschreibungsformen dar. Sie wird aber im Umfeld von C++ und damit auch in diesem Buchverwendet.

    l

    Die Grammatik von C++ ist zum Teil derart komplex, da sie schwer verstndlich ist undkeinesfalls Klarheit schafft. Dieses Buch ist kein Sprachhandbuch zur Programmiersprache C++und erhebt daher nicht den Anspruch, C++ in seiner Gesamtheit zu beschreiben. Formale

    l

    3.1 Sprachbeschreibung mit Grammatik

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node19.htm (2 von 3) [10.09.2000 10:02:14]

  • Beschreibungen der Syntax der Programmiersprache C++ werden ausschlielich dort verwendet,wo sie Klarheit schaffen und Zweideutigkeiten vermeiden helfen. Beschreibungen, die keineKlarheit bringen, werden nicht verwendet.

    Vorige Seite: 3 Lexikalische Elemente von Eine Ebene hher: 3 Lexikalische Elemente von NchsteSeite: 3.2 Bezeichner

    (c) Thomas Strasser, dpunkt 1997

    3.1 Sprachbeschreibung mit Grammatik

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node19.htm (3 von 3) [10.09.2000 10:02:14]

  • Vorige Seite: 3.1 Sprachbeschreibung mit Grammatik Eine Ebene hher: 3 Lexikalische Elemente vonNchste Seite: 3.3 Schlsselwrter

    3.2 BezeichnerBezeichner sind Namen fr beliebige ,,Objekte`` im Programm: Variablen, Funktionen, selbstdefinierteDatentypen, Klassen, Objekte etc. Fr Bezeichner gilt, da sie aus beliebigen Buchstaben, Ziffern unddem Zeichen _ (Underscore ) zusammengesetzt sind, mit der Einschrnkung, da das erste Zeichen keineZiffer sein darf.

    Sie sind wie folgt aufgebaut:

    identifier:

    nondigit

    identifier nondigit

    identifier digit

    nondigit: one of

    _ a b c d e f g h i j k l m n o p q r s t u v w x y z

    A B C D E F G H I J K L M

    N O P Q R S T U V W X Y Z

    digit: one of

    0 1 2 3 4 5 6 7 8 9

    Beispiele fr gltige Bezeichner sind hallo, _hallo, _ (Underscore) oder Test123. Dagegen sind1Hallo, +abcd oder etwa bba ungltige Bezeichner.

    Zwei Dinge sind in bezug auf Bezeichner wesentlich:C++ ist Case Sensitive , das heit, es unterscheidet zwischen Gro- und Kleinschreibung. sum undSum sind daher zwei verschiedene Bezeichner.

    l

    Wrter werden durch Zeichen, die keine Buchstaben, Ziffern und Underscores sind, begrenzt.l

    3.2 Bezeichner

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node20.htm (1 von 2) [10.09.2000 10:02:15]

  • Daher ist zum Beispiel elseif ein einzelner Bezeichner und nicht die Aufeinanderfolge vonelse und if.

    Wichtig ist, bei der Wahl von Bezeichnernamen konsistent vorzugehen. Bezeichnernamen sollten nachbestimmten (frei whlbaren) Regeln aufgebaut sein. So wird erreicht, da bereits aus dem Namenhervorgeht, um welche Art von Bezeichnern es sich handelt. Im folgenden werden einige Richtlinien zurWahl der Bezeichner vorgeschlagen (basierend auf [HN93]):

    Variablen, Konstanten, Funktionen und Methoden beginnen mit einem Kleinbuchstaben, Typenmit einem Grobuchstaben.

    l

    Namen, die aus mehr als einem Wort zusammengesetzt sind, werden in Mixed Case notiert:endOfLineReached.

    l

    Bezeichner sollten ,,sinnvolle`` Namen erhalten:Variablennamen sollten Rckschlsse auf ihre Art erlauben und entsprechend gewhltwerden: isDone kann wahr oder falsch sein, eine Variable numberOfLines wird eineZahl sein und eine Variable firstName eine Zeichenkette.

    m

    Funktionen und Methoden werden mit ,,Ttigkeiten`` umschrieben: terminatePrg,insertBlanks oder draw.

    m

    l

    Bezeichner, die mit zwei Underscores (_), denen ein Grobuchstabe folgt, beginnen, sind zwarsyntaktisch richtig, allerdings oft fr Compiler-interne Bezeichner reserviert und sollten dahervermieden werden.

    l

    Vorige Seite: 3.1 Sprachbeschreibung mit Grammatik Eine Ebene hher: 3 Lexikalische Elemente vonNchste Seite: 3.3 Schlsselwrter

    (c) Thomas Strasser, dpunkt 1997

    3.2 Bezeichner

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node20.htm (2 von 2) [10.09.2000 10:02:15]

  • Vorige Seite: 3.2 Bezeichner Eine Ebene hher: 3 Lexikalische Elemente von Nchste Seite: 3.4Literale

    3.3 SchlsselwrterSchlsselwrter sind reservierte Bezeichner mit einer vorgegebenen Bedeutung und dienen zurBeschreibung von Aktionen und Objekten in C++-Programmen. Sie drfen daher nicht anderweitigverwendet werden. Tabelle 3.1 zeigt die Schlsselwrter von C++.

    Kategorie SchlsselwrterBasisdatentypen bool true false char wchar_t short signed

    unsigned int long float double voidDatentypen enum class struct union typedefSpeicherklassen auto extern register static mutableQualifizierer const volatileKontrollstrukturen if while else case switch default do forSprunganweisungen break continue return gotoTypumwandlungen const_cast dynamic_cast reinterpret_cast

    static_castTypsystem typeid typenameNamensrume namespace usingOperatoren new delete sizeof operator thisZugriffsschutz friend private public protectedFunktionsattribute inline virtual explicitGenerizitt templateAusnahmebehandlung catch throw tryAssemblercode asm

    Tabelle: Schlsselwrter in C++Neben diesen Standard-Schlsselwrtern existieren noch andere reservierte Wrter, die alternativ zu denSymbolen fr Operatoren (Operator-Symbole) verwendet werden knnen und in Abschnitt 3.5.3angefhrt sind.

    3.3 Schlsselwrter

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node21.htm (1 von 2) [10.09.2000 10:02:16]

  • Vorige Seite: 3.2 Bezeichner Eine Ebene hher: 3 Lexikalische Elemente von Nchste Seite: 3.4Literale

    (c) Thomas Strasser, dpunkt 1997

    3.3 Schlsselwrter

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node21.htm (2 von 2) [10.09.2000 10:02:16]

  • Vorige Seite: 3.3 Schlsselwrter Eine Ebene hher: 3 Lexikalische Elemente von Nchste Seite: 3.4.1Ganze Zahlen

    3.4 LiteraleLiterale sind Zahlen, Wahrheitswerte oder Zeichenketten im Programmtext. So wie alle anderen Symboleeines Programms mssen auch sie nach bestimmten Regeln aufgebaut sein.

    3.4.1 Ganze Zahlenl 3.4.2 Fliekommazahlenl 3.4.3 Zeichenl 3.4.4 Zeichenkettenl 3.4.5 Wahrheitswertel

    (c) Thomas Strasser, dpunkt 1997

    3.4 Literale

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node22.htm [10.09.2000 10:02:16]

  • Vorige Seite: 3.4 Literale Eine Ebene hher: 3.4 Literale Nchste Seite: 3.4.2 Fliekommazahlen

    3.4.1 Ganze ZahlenEine ganze Zahl besteht aus einer Folge von Ziffern. Es wird zwischen Dezimal-, Oktal- undHexadezimalzahlen unterschieden, wobei jede der Zahlen durch die (optionale) Angabe einessogenannten Suffixes noch genauer spezifiziert werden kann:

    integer-literal:

    decimal-literal integer-suffixopt

    octal-literal integer-suffixopt

    hexadecimal-literal integer-suffixopt

    integer-suffix:

    unsigned-suffix long-suffixopt

    long-suffix unsigned-suffixopt

    unsigned-suffix: one of

    u U

    long-suffix: one of

    l L

    Integer-Suffix bestimmt den Wertebereich einer Zahl genauer: Ein Suffix u beziehungsweise U bedeutet,da die Zahl vorzeichenlos ist, l beziehungsweise L gibt an, da es sich um eine sehr groe Zahl (einesogenannte long-Zahl) handelt.Die einzelnen Zahlen im Detail:

    Eine Dezimalzahl beginnt mit einer von 0 verschiedenen Ziffer, der eine beliebig lange Reihe vonZiffern (auch 0) folgen kann:

    decimal-literal:

    nonzero-digit

    l

    3.4.1 Ganze Zahlen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node23.htm (1 von 3) [10.09.2000 10:02:17]

  • decimal-literal digit

    digit: one of

    0 1 2 3 4 5 6 7 8 9

    nonzero-digit: one of

    1 2 3 4 5 6 7 8 9Eine Oktalzahl beginnt mit der Ziffer 0, der eine Sequenz von Oktalziffern folgen kann:

    octal-literal:

    0

    octal-literal octal-digit

    octal-digit: one of

    0 1 2 3 4 5 6 7

    l

    Eine Hexadezimalzahl besteht aus einer Reihe von Hexadezimalziffern, denen die Sequenz 0xbeziehungsweise 0X vorangestellt ist:

    hexadecimal-literal:

    0x hexadecimal-digit

    0X hexadecimal-digit

    hexadecimal-literal hexadecimal-digit

    hexadecimal-digit: one of

    0 1 2 3 4 5 6 7 8 9

    a b c d e f A B C D E F

    l

    Einige Beispiele fr gltige Zahlen:Ganze Dezimalzahlen 65 123 50000 1234567L 987UL 45ulOktalzahlen 024 01 077ULHexadezimalzahlen 0x1A 0XFFFF 0x1234567LUngltige Zahlen 08 1A 0xG 1234ulL 00xa

    3.4.1 Ganze Zahlen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node23.htm (2 von 3) [10.09.2000 10:02:17]

  • Die Verwendung von l zur Spezifikation von long-Zahlen sollte ausGrnden der Lesbarkeit (leicht zu verwechseln mit 1) unterbleiben. Es istbesser, L zu verwenden.

    Vorige Seite: 3.4 Literale Eine Ebene hher: 3.4 Literale Nchste Seite: 3.4.2 Fliekommazahlen

    (c) Thomas Strasser, dpunkt 1997

    3.4.1 Ganze Zahlen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node23.htm (3 von 3) [10.09.2000 10:02:17]

  • Vorige Seite: 3.4.1 Ganze Zahlen Eine Ebene hher: 3.4 Literale Nchste Seite: 3.4.3 Zeichen

    3.4.2 FliekommazahlenEine Fliekommazahl besteht aus einer gebrochenen Zahl optional gefolgt von einem Exponenten (E).Der genaue Aufbau ist wie folgt angegeben:

    floating-literal:

    fractional-constant exponent-part floating-suffix

    digit-sequence exponent-part floating-suffix

    fractional-constant:

    digit-sequenceopt . digit-sequence

    digit-sequence .

    exponent-part:

    e signopt digit-sequence

    E signopt digit-sequence

    sign: one of

    + -

    digit-sequence:

    digit

    digit-sequence digit

    floating-suffix: one of

    f l F L

    Ein Suffix f oder F bezeichnet - ebenso wie eine Zahl ohne Suffix - eine Fliekommazahl mit einfacherGenauigkeit. Ein Suffix l oder L gibt an, da die Fliekommazahl eine erhhte Genauigkeit aufweist.

    Beispiele fr gltige Fliekommazahlen sind 3.141592, 10000., 3.0856782E16F,1234567.89E-20L. Beispiele fr ungltige Fliekommazahlen sind 0x123.56, 45E+-23 oder

    3.4.2 Fliekommazahlen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node24.htm (1 von 2) [10.09.2000 10:02:17]

  • 12.345FL.

    (c) Thomas Strasser, dpunkt 1997

    3.4.2 Fliekommazahlen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node24.htm (2 von 2) [10.09.2000 10:02:17]

  • Vorige Seite: 3.4.2 Fliekommazahlen Eine Ebene hher: 3.4 Literale Nchste Seite: 3.4.4 Zeichenketten

    3.4.3 ZeichenEin Zeichen-Literal wird in einfache Hochkommas eingeschlossen angegeben. Zeichen-Literale umfassenneben den druckbaren Zeichen auch Steuerzeichen. Um diese (nicht druckbaren) Zeichen darzustellen, wirdeine sogenannte Escape-Sequenz verwendet. Eine Escape-Sequenz wird mit dem Zeichen \ (Backslash)eingeleitet und bestimmt ein Zeichen aus dem ASCII mittels einer oktalen oder hexadezimalen Zahl. Umdas Zeichen \ selbst darzustellen, wird \\ verwendet.

    character-literal:

    'c-char-sequence'

    L'c-char-sequence'

    c-char-sequence:

    c-char

    c-char-sequence c-char

    c-char:

    any member of the source character set except

    the single-quote ', backslash \, or new-line character

    escape-sequence

    escape-sequence:

    simple-escape-sequence

    octal-escape-sequence

    hexadecimal-escape-sequence

    simple-escape-sequence: one of

    \' \" \? \\

    \a \b \f \n \r \t \v

    octal-escape-sequence:

    3.4.3 Zeichen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node25.htm (1 von 2) [10.09.2000 10:02:18]

  • \ octal-digit

    octal-escape-sequence octal-digit

    hexadecimal-escape-sequence:

    \x hexadecimal-digit

    hexadecimal-escape-sequence hexadecimal-digit

    Beispiele fr Zeichen-Literale sind:'A' Zeichen A '0' Zeichen 0'\"' einfaches Hochkomma '"' doppeltes Hochkomma'\\' Backslash '\a' Alarmton'\b' Backspace '\f' Seitenvorschub'\n' Neue Zeile '\r' Wagenrcklauf'\t' Tabulator '\v' Vertikaltabulator'\x12' Zeichen mit ASCII-Wert 18 '\12' Zeichen mit ASCII-Wert 10'\xFE' Zeichen mit ASCII-Wert 254 '\062' Zeichen mit ASCII-Wert 50

    C++ untersttzt auch multilinguale Zeichenstze mit mehr als 256 Zeichen. Derartige Zeichen beginnen mitL und sind Teil eines sogenannten Wide Character Sets (Typ wchar_t).

    Vorige Seite: 3.4.2 Fliekommazahlen Eine Ebene hher: 3.4 Literale Nchste Seite: 3.4.4 Zeichenketten

    (c) Thomas Strasser, dpunkt 1997

    3.4.3 Zeichen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node25.htm (2 von 2) [10.09.2000 10:02:18]

  • Vorige Seite: 3.4.3 Zeichen Eine Ebene hher: 3.4 Literale Nchste Seite: 3.4.5 Wahrheitswerte

    3.4.4 ZeichenkettenEin Zeichenketten-Literal ist eine (mglicherweise auch leere) Sequenz von Zeichen, die in doppelteHochkommas eingeschlossen ist. Der Zeichenkette kann optional ein L vorangestellt werden, um eineZeichenkette mit Multilingual-Zeichen zu kennzeichnen.

    string-literal:

    " s-char-sequenceopt "

    L " s-char-sequenceopt "

    s-char-sequence:

    s-char

    s-char-sequence s-char

    s-char:

    any member of the source character set except

    the double-quote ", \\, or new-line character

    escape-sequence

    Zwei Dinge sind im Zusammenhang mit Zeichenketten zu beachten:Zeichenketten-Literale werden automatisch vom System um ein Zeichen ,,verlngert``: Sie werdendurch das Zeichen mit dem ASCII-Wert 0 abgeschlossen, das das Ende der Zeichenkettekennzeichnet. Die oben angefhrte Zeichenkette Hallo wird also vom Compiler als Folge vonsechs Zeichen abgelegt, von denen das letzte das Zeichen 0x00 ist.

    l

    Ferner ist zu beachten, da aufeinanderfolgende Zeichenketten-Literale automatisch zu einemeinzelnen Literal verkettet werden. So wird die Sequenz"Hello" " " "world!"automatisch zu"Hello world!"verkettet.

    l

    Beispiele fr Zeichenketten-Literale sind: "Hallo", "" (Leere Zeichenkette) oder "Ha \x41" (Ha

    3.4.4 Zeichenketten

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node26.htm (1 von 2) [10.09.2000 10:02:18]

  • A). Ein Beispiel fr eine wchar_t-Zeichenkette ist etwa L"Hallo", die durch die Zeichenfolge L'H',L'a', L'l', L'l', L'o', 0x00 reprsentiert wird.

    (c) Thomas Strasser, dpunkt 1997

    3.4.4 Zeichenketten

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node26.htm (2 von 2) [10.09.2000 10:02:18]

  • Vorige Seite: 3.4.4 Zeichenketten Eine Ebene hher: 3.4 Literale

    3.4.5 Wahrheitswerte

    Wahrheitswerte (Boolesche Werte, Boolean-Werte) umfassen die Werte ,,Wahr`` (true ) und,,Falsch``(false ). boolean-literal:

    false

    true

    Mit Boolean-Werten werden logische Sachverhalte dargestellt.

    (c) Thomas Strasser, dpunkt 1997

    3.4.5 Wahrheitswerte

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node27.htm [10.09.2000 10:02:19]

  • Vorige Seite: 3.4.5 Wahrheitswerte Eine Ebene hher: 3 Lexikalische Elemente von Nchste Seite:3.5.1 Operatoren

    3.5 Operatoren und BegrenzerOperatoren und Begrenzer sind einzelne Sonderzeichen beziehungsweise Sequenzen von Sonderzeichenoder reservierte Wrter mit vordefinierter Bedeutung. Operatoren bestimmen Aktionen, die aufProgrammobjekte ausgefhrt werden knnen. Begrenzer wiederum trennen Symbole des Programmtextsvoneinander.

    3.5.1 Operatorenl 3.5.2 Begrenzerl 3.5.3 Alternative Operatoren und Begrenzerl 3.5.4 Kommentarel

    (c) Thomas Strasser, dpunkt 1997

    3.5 Operatoren und Begrenzer

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node28.htm [10.09.2000 10:02:19]

  • Vorige Seite: 3.5 Operatoren und Begrenzer Eine Ebene hher: 3.5 Operatoren und Begrenzer NchsteSeite: 3.5.2 Begrenzer

    3.5.1 OperatorenDie Tabellen 3.3 und 3.2 zeigen die arithmetischen und logischen Operatoren von C++. Tabelle 3.4 fhrtweitere Operatoren mit Namen und Verwendung an. In den Tabellen steht expr fr einen beliebigenAusdruck (Expression), lvalue fr einen beliebigen Ausdruck, der ein vernderbares Objekt reprsentiert,className fr einen Klassen- oder Strukturnamen, member fr ein Klassen- oder Strukturelement,pointer fr einen beliebigen Zeiger, type fr einen Typnamen, exception fr eine Ausnahme undpreprocText fr einen beliebigen Prprozessortext.

    Anmerkungen zu den beiden Tabellen:Die Schiebeoperatoren > werden auch fr die Ausgabe und Eingabe verwendet.l Weitere Operatoren ergeben sich aus einer Kombination von arithmetischen beziehungsweiselogischen Operatoren mit dem Zuweisungsoperator. Die Anweisung lvalue += expr; zumBeispiel entspricht der Anweisungskombination lvalue = lvalue + expr;. Es gibtfolgende kombinierte Operatoren: *=, /=, %=, +=, -=, =, &=, |=, ^=.

    l

    Op Name Beispiel Op Name Beispiel++ Postinkrement lvalue++ * Multiplikation expr*expr++ Preinkrement ++lvalue / Division expr/expr-- Postdekrement lvalue-- % Modulo expr%expr-- Predekrement --lvalue + Binre Addition expr+expr+ Unres Plus +expr - Binre Subtraktion expr-expr- Unres Minus -expr

    Tabelle 3.2: Arithmetische Operatoren [Str92, S. 99f]Op Name Beispiel Op Name Beispiel! Logisches Nicht !expr & Bitweises Und expr & expr&& Logisches Und expr && expr | Bitweises Oder (inkl.) expr | expr|| Logisches Oder (inkl.) expr || expr ^ Bitweises Oder (exkl.) expr ^ expr~ Bit-Komplement ~expr Rechts-Schiebeoperation expr >> expr

    3.5.1 Operatoren

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node29.htm (1 von 3) [10.09.2000 10:02:20]

  • > Grer expr > expr = expr!= Ungleichheitstest expr != expr

    Tabelle: Logische Operatoren [Str92, S. 99f]Op Name Beispiel:: Scope-Operator scopeName::member:: Globaler Scope-Operator ::name. Mitgliedsoperator object.member-> Mitgliedsoperator (Zeiger) pointer->member.* Element-Zeiger-Operator object.*pointerToMember->* Element-Zeiger-Operator (Zeiger) pointer->*pointerToMembernew Allokierung von Objekten new typenew[] Allokierung von Objekten, Vektorform new type[expr]delete Zerstren von Objekten delete pointerdelete[] Zerstren von Objekten, Vektorform delete[] pointer

    [] Indexoperator pointer[expr]() Funktionsaufrufoperator expr(exression_list);() Konstruktionsoperator new type(expr_list);

    sizeof Grenoperator sizeof(expr);?: Konditionaler Audrucksoperator expr ? expr : expr;& Adreoperator &lvalue;* Indirektionsoperator *expr;() Typumwandlung (type)expr; bzw. type(expr);= Zuweisung lvalue = expr

    throw Auslseoperator fr Ausnahmen throw exception;, Kommaoperator expr, expr# Prprozessoroperator #preprocText## Konkatenationsoperator preprocText ## preprocText

    Tabelle: Andere Operatoren [Str92, S. 99f], [ISO95]

    3.5.1 Operatoren

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node29.htm (2 von 3) [10.09.2000 10:02:20]

  • Vorige Seite: 3.5 Operatoren und Begrenzer Eine Ebene hher: 3.5 Operatoren und Begrenzer NchsteSeite: 3.5.2 Begrenzer

    (c) Thomas Strasser, dpunkt 1997

    3.5.1 Operatoren

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node29.htm (3 von 3) [10.09.2000 10:02:20]

  • Vorige Seite: 3.5.1 Operatoren Eine Ebene hher: 3.5 Operatoren und Begrenzer Nchste Seite: 3.5.3Alternative Operatoren und

    3.5.2 BegrenzerBegrenzer trennen Symbole voneinander. C++ kennt die im folgenden angefhrten Begrenzer, wobei zubeachten ist, da einige Symbole mehrfach belegt sind. So existieren zum Beispiel sowohl ein Operator* als auch ein Begrenzer *.

    Der Strichpunkt ; dient als Terminator einer Anweisung. Jeder gltige C++-Ausdruck (auch der leere),der mit einem Strichpunkt endet, wird als Anweisung interpretiert.

    Das Komma , trennt die Argumente in einer Funktionsparameterliste.y = power(x, 12);

    Runde Klammern () fassen Ausdrcke zusammen, isolieren konditionale Ausdrcke und begrenzenFunktionsparameterlisten:a = 3 * (b + c); // Umgehen der ueblichen Prioritaetif (a < b) // Konditionaler Ausdruck d = square(a); // Aufruf der Funktion "square"

    Eckige Klammern [] dienen zum Deklarieren von ein- und mehrdimensionalen Vektoren. Die eckigenKlammern sind in einem anderen Zusammenhang auch ein Operator (vergleiche Abschnitt 8.3), mit demVektoren indiziert werden.char str[30]; // ein Vektor von 30 Zeichenstr[5] = 'a'; // Indizierung von str, Operator []

    Der Doppelpunkt : kennzeichnet eine mit einer Sprungmarke (einem Label) versehene Anweisung....

    start: x = 0; // Sprungmarke start...

    goto start; // Verzweigung zur Sprungmarke start...

    switch(a) { case 1: // Sprungmarke 1 in switch a++; break; case 7: // Sprungmarke 7 in switch a = b;

    3.5.2 Begrenzer

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node30.htm (1 von 3) [10.09.2000 10:02:21]

  • break; case 39: // Sprungmarke 39 in switch --a; break; default: // Sprungmarke default in switch break; }...

    Geschweifte Klammern {} markieren Beginn und Ende eines Anweisungsblocks.int main(){ ...

    if (x==0) { ..

    }}...

    Ellipsen sind drei unmittelbar aufeinanderfolgende Punkte ohne Whitespaces dazwischen. Siekennzeichnen in der formalen Parameterliste einer Funktion eine variable Anzahl von Argumenten oderArgumente mit beliebigen Typen.

    Anmerkung: Als Whitespaces werden alle ,,Zwischenzeichen`` bezeichnet: Leerzeichen (Blank, Space),Tabulator (horizontal und vertikal), Zeilenvorschub und Seitenvorschub./* Die Funktion "printf" hat eine beliebige Anzahl von * Argumenten. Dies ist ihr Prototyp: */int printf (const char* __format, ...);

    Der Stern * in einer Variablendeklaration zeigt an, da ein Zeiger auf ein Objekt deklariert wird.char* string; // Zeiger auf Variable des Typs charint** a; // Zeiger auf Zeiger auf int-Variable

    Das Referenzzeichen & in einer Variablendeklaration zeigt an, da ein Referenz-Objekt deklariert wird.char& ch; // char-Referenzint& a; // int-Referenz

    Das Gleichheitszeichen = trennt Variablendeklarationen von Initialisierungslisten. In der Parameterlisteeiner Funktion wiederum kennzeichnet das Gleichheitszeichen den Vorgabewert eines Parameters.float pi=3.14159265; // Initialisierung von piint foo(int a=1); // a hat Vorgabewert 1

    3.5.2 Begrenzer

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node30.htm (2 von 3) [10.09.2000 10:02:21]

  • Eine Initialisierung einer Variablen ist keine Zuweisung! Zuweisung undInitialisierung erfolgen zwar mit dem Symbol =, im ersten Fall handelt essich aber um den Begrenzer =, im zweiten Fall um den Operator =. EineInitialisierung erfolgt beim Anlegen einer Variable, whrend sich eineZuweisung immer auf ein bereits existierendes Objekt bezieht (mehr dazuin Abschnitt 11.7.1).

    Vorige Seite: 3.5.1 Operatoren Eine Ebene hher: 3.5 Operatoren und Begrenzer Nchste Seite: 3.5.3Alternative Operatoren und

    (c) Thomas Strasser, dpunkt 1997

    3.5.2 Begrenzer

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node30.htm (3 von 3) [10.09.2000 10:02:21]

  • Vorige Seite: 3.5.2 Begrenzer Eine Ebene hher: 3.5 Operatoren und Begrenzer Nchste Seite: 3.5.4Kommentare

    3.5.3 Alternative Operatoren und BegrenzerFr verschiedene Operatoren und Begrenzer existieren alternative Symbole beziehungsweise sogenannteTrigraph-Sequenzen . Tabelle 3.5 zeigt die alternativen Schlsselwrter, Tabelle 3.6 dieTrigraph-Sequenzen, die bei der bersetzung vor jedem anderen Symbol durch ihr eigentliches Symbolersetzt werden.

    Anmerkung: Die Trigraph-Sequenzen sowie die alternativen Symbole sind Bestandteil des Prprozessors(Anhang B) und nicht Teil des Sprachumfangs der eigentlichen Sprache C++. Sie werden aber imZusammenhang mit den lexikalischen Elementen behandelt.

    Symbol Alternative Symbol Alternative Symbol Alternative{ &= and_eq[ |= or_eq# %: ## %:%: ^= xor_eq&& and & bitand != not_eq|| or | bitor ! not~ compl ^ xor

    Tabelle 3.5: Alternative Symbole fr Operatoren undBegrenzer [ISO95, lex.key]

    Symbol Trigraph Symbol Trigraph Symbol Trigraph# ??= [ ??( { ??^ ??' | ??! ~ ??-

    Tabelle 3.6: Trigraph-Sequenzen [ISO95, lex.digraph]

    3.5.3 Alternative Operatoren und

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node31.htm (1 von 2) [10.09.2000 10:02:21]

  • Vorige Seite: 3.5.2 Begrenzer Eine Ebene hher: 3.5 Operatoren und Begrenzer Nchste Seite: 3.5.4Kommentare

    (c) Thomas Strasser, dpunkt 1997

    3.5.3 Alternative Operatoren und

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node31.htm (2 von 2) [10.09.2000 10:02:21]

  • Vorige Seite: 3.5.3 Alternative Operatoren und Eine Ebene hher: 3.5 Operatoren und Begrenzer

    3.5.4 Kommentare

    Kommentare sind Anmerkungen im Programmtext, die fr den Leser des Programms bestimmt sind. DerCompiler ,,ignoriert`` sie und entfernt sie vor dem bersetzen des Programms in Maschinencode ausdem Quelltext. In C++ gibt es zwei Mglichkeiten, Kommentare in den Quelltext einzufgen: 1.

    Einzeilige Kommentare: Die Zeichenfolge // leitet einen Kommentar ein, der sich bis zum Endeder Zeile, in der er auftritt, erstreckt. Der Kommentar kann an beliebiger Stelle beginnen.

    2. Kommentare ber mehrere Zeilen: Mit der Zeichenfolge /* beginnt ein Kommentar, der mit demersten darauffolgenden Zeichenpaar */ endet. Kommentare dieser Art knnen mehrere Zeilen langsein. Es ist allerdings nicht mglich, derartige Kommentare zu ,,schachteln`` (ein geschachtelterKommentar ist ein Kommentar im Kommentar).

    foo(c, d); // Ein einfacher C++-Kommentarfoo(c, d); /* Ein Kommentar im C-Stil */

    /* // Auskommentieren von Codeteilenfoo(c,d); // Die C++-Kommentare werden++a; // mit auskommentiert*/

    /* xy /* ab */*/ // Fehler! Geschachtelter Kommentar // in C++ nicht moeglich, der // Kommentar ist nach "ab */" zu Ende.

    Grundstzlich sind beide Arten von Kommentaren zulssig. Jedoch ist esblich, einzeilige Kommentare zu verwenden. Mehrzeilige Kommentarewerden zum Auskommentieren von Codeteilen benutzt.

    3.5.4 Kommentare

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node32.htm (1 von 2) [10.09.2000 10:02:22]

  • (c) Thomas Strasser, dpunkt 1997

    3.5.4 Kommentare

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node32.htm (2 von 2) [10.09.2000 10:02:22]

  • Vorige Seite: 3.5.4 Kommentare Eine Ebene hher: C++ Programmieren mit Stil Nchste Seite: 4.1Die Begriffe Definition

    4 Einfache Deklarationen undBasisdatentypenDieses Kapitel zeigt, wie in C++ auf einfache Art Variablen und Konstanten vereinbart werden. Fernerwerden die grundlegenden Datentypen von C++ (,,Basisdatentypen``) erlutert.

    4.1 Die Begriffe Definition und Deklarationl 4.2 Basisdatentypen

    4.2.1 Der Datentyp boolm 4.2.2 Die Datentypen char und wchar_tm 4.2.3 Die int-Datentypenm 4.2.4 Fliekommadatentypenm 4.2.5 Der Datentyp voidm

    l

    4.3 Aufzhlungstypenl 4.4 Deklaration von Konstantenl

    (c) Thomas Strasser, dpunkt 1997

    4 Einfache Deklarationen und

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node33.htm [10.09.2000 10:02:23]

  • Vorige Seite: 4 Einfache Deklarationen und Eine Ebene hher: 4 Einfache Deklarationen und NchsteSeite: 4.2 Basisdatentypen

    4.1 Die Begriffe Definition undDeklarationIn C++ mssen alle Objekte vor ihrer Verwendung deklariert werden. Eine Deklaration gibt demCompiler einen Namen (Bezeichner) bekannt und verbindet diesen Namen mit einem Typ. Der Typ gibtAuskunft ber die ,,Art`` des Bezeichners und bestimmt damit implizit die Operationen, die fr dasdeklarierte Objekt zulssig sind. Eine Deklaration eines Objekts als Zahl zum Beispiel bedeutet, daunter anderem die Operationen +, -, / etc. auf dieses Objekt angewandt werden knnen. EinfacheDeklarationen sind von der Art T identifier, wobei T ein Datentyp und identifier ein Bezeichner ist. AuchDeklarationen der Art T identifierList sind mglich, wobei identifierList eine Liste von durch Beistrichegetrennten Bezeichnern ist:int i; // i ist eine ganze Zahlchar ch; // ch ist ein Zeichenint j, k, l; // j, k und l sind ganze ZahlenDie Begriffe Deklaration und Definition werden oft synonym verwendet. Sie bezeichnen aberverschiedene Dinge: Eine Deklaration fhrt einen oder mehrere Namen in einem Programm ein [ES90,S. 13]. Dem Compiler werden zwar mit dem Namen Informationen ber einen Typ oder eine Funktionbekanntgegeben, es wird aber kein Programmcode erzeugt oder Speicherplatz fr ein Objekt angelegt.Eine Definition wiederum vereinbart konkrete Objekte im Programm, also Variablen (inklusive derenSpeicherplatz) oder ausfhrbaren Code. Jede Definition ist damit zugleich eine Deklaration. Ebenso sindsehr viele Deklarationen zugleich Definitionen: Die Deklaration einer Variablen vom Typ int in deroben angefhrten Art gibt den Namen des Objekts bekannt und vereinbart auch Speicherplatz fr dasObjekt. Andererseits kann der Name einer Variablen auch vereinbart werden, ohne da ein konkretesObjekt angelegt wird (siehe Abschnitt 9.2.1, Speicherklassenattribut extern). hnlich ist die Situationin bezug auf Klassen und Funktionen: Die Deklaration gibt Auskunft ber Name und Art einesBezeichners, aber erst die Definition vereinbart ein konkretes Objekt.Daraus folgt, da es fr jedes Objekt eines Programms beliebig viele Deklarationen (die sich nichtwidersprechen drfen) geben kann, aber jeweils nur eine Definition.C++ unterscheidet sich in bezug auf Deklarationen von C: Im Unterschied zu C sind Deklarationen inC++ Anweisungen und knnen daher berall im Programmtext stehen.

    4.1 Die Begriffe Definition

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node34.htm (1 von 2) [10.09.2000 10:02:23]

  • Deklarationen knnen berall im Programmtext stehen, sollten allerdings(bis auf wenige Ausnahmen) mit Rcksicht auf die Lesbarkeit undbersichtlichkeit vor den anderen Anweisungen codiert werden.

    Vorige Seite: 4 Einfache Deklarationen und Eine Ebene hher: 4 Einfache Deklarationen und NchsteSeite: 4.2 Basisdatentypen

    (c) Thomas Strasser, dpunkt 1997

    4.1 Die Begriffe Definition

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node34.htm (2 von 2) [10.09.2000 10:02:23]

  • Vorige Seite: 4.1 Die Begriffe Definition Eine Ebene hher: 4 Einfache Deklarationen und NchsteSeite: 4.2.1 Der Datentyp bool

    4.2 BasisdatentypenBasisdatentypen sind vordefinierte einfache Datentypen. Sie umfassen Wahrheitswerte (bool), Zahlen(int, short int, long int, float, double und long double), Zeichen (char, wchar_t)und den Typ ,,nichts`` (void). Daneben gibt [ISO95] auch den Typ enum als einen fundamental typean. Ein enum ist zwar kein vordefinierter Typ, wird aber aus Grnden der Konformitt ebenfalls hierangefhrt.

    Einige dieser Typen knnen auch ber andere Namen, sogenannte Typspezifikatoren, angegeben werden.Tabelle 4.1 zeigt die Basisdatentypen, die auch ber alternative Typnamen spezifiziert werden knnen.

    Typ Spezifikatorenint int, signed, signed intunsigned int unsigned int, unsignedshort int short int, short,

    signed short, signed short intunsigned short int unsigned short int, unsigned shortlong int long int, long, signed long, signed long intunsigned long int unsigned long int, unsigned long

    Tabelle 4.1: Typen und ihre alternativen Spezifikatoren [ISO95,dcl-type.simple]

    Im folgenden werden die (blichen) einfachen Namen short und long anstelle ihrer ,,korrekten``Typnamen short int und long int verwendet.

    Die Typen bool, char, wchar_t und alle int-Typen werden auch als Integrale Typen oderInteger-Typen bezeichnet.

    4.2.1 Der Datentyp booll 4.2.2 Die Datentypen char und wchar_tl

    4.2 Basisdatentypen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node35.htm (1 von 2) [10.09.2000 10:02:24]

  • 4.2.3 Die int-Datentypenl 4.2.4 Fliekommadatentypenl 4.2.5 Der Datentyp voidl

    Vorige Seite: 4.1 Die Begriffe Definition Eine Ebene hher: 4 Einfache Deklarationen und NchsteSeite: 4.2.1 Der Datentyp bool

    (c) Thomas Strasser, dpunkt 1997

    4.2 Basisdatentypen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node35.htm (2 von 2) [10.09.2000 10:02:24]

  • Vorige Seite: 4.2 Basisdatentypen Eine Ebene hher: 4.2 Basisdatentypen Nchste Seite: 4.2.2 DieDatentypen char und wchar_t

    4.2.1 Der Datentyp boolMit dem Datentyp bool werden Wahrheitswerte beschrieben. Sein Wertebereich umfat die beidenWerte false und true, die die Werte ,,Falsch`` und ,,Wahr`` ausdrcken.

    Tabelle 4.2 zeigt die Ergebnisse der logischen Operationen &&, || und !. && reprsentiert die logischeUnd-Verknpfung, || die logische inklusive Oder-Verkpfung und ! die Negation.

    X Y X && Y X || Y !Xtrue true true true falsetrue false false true falsefalse true false true truefalse false false false true

    Tabelle 4.2: Logische Operationen

    Vorige Seite: 4.2 Basisdatentypen Eine Ebene hher: 4.2 Basisdatentypen Nchste Seite: 4.2.2 DieDatentypen char und wchar_t

    (c) Thomas Strasser, dpunkt 1997

    4.2.1 Der Datentyp bool

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node36.htm [10.09.2000 10:02:24]

  • Vorige Seite: 4.2.1 Der Datentyp bool Eine Ebene hher: 4.2 Basisdatentypen Nchste Seite: 4.2.3Die int-Datentypen

    4.2.2 Die Datentypen char und wchar_tDer grundlegende Zeichentyp ist char. Er belegt ein Byte Speicherplatz und besitzt somit 256Ausprgungen. Im Zeichendatentyp findet der gesamte erweiterte ASCII-Zeichensatz Platz. Da imASCII-Zeichensatz alle Zeichen geordnet sind, lassen sich auch Vergleiche zwischen einzelnen Zeichendurchfhren. Anhand des ASCII-Zeichensatzes knnen auch Umwandlungen von Zeichen in Zahlen undumgekehrt vorgenommen werden. Das Zeichen 'A' zum Beispiel entspricht der Zahl 65.

    Der Zeichendatentyp kann explizit als signed oder unsigned spezifiziert werden. Zu beachten ist,da char, unsigned char und signed char drei verschiedene Typen sind. Ob ein charnegative Zahlen aufnehmen kann (Wertebereich von -128 bis +127), hngt von der jeweiligenCompiler-Implementierung ab.char ch; // Wertebereich zw. -128 und 127unsigned char uch; // Wertebereich zw. 0 und 255wchar_t mch;ch = 'A';uch = 'a';mch = L'X';

    (c) Thomas Strasser, dpunkt 1997

    4.2.2 Die Datentypen char

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node37.htm [10.09.2000 10:02:25]

  • Vorige Seite: 4.2.2 Die Datentypen char und wchar_t Eine Ebene hher: 4.2 BasisdatentypenNchste Seite: 4.2.4 Fliekommadatentypen

    4.2.3 Die int-DatentypenDer grundlegende Ganzzahldatentyp ist int. Der Wertebereich von int-Typen ist durch die Greeines Maschinenwortes des jeweiligen Rechnersystems bestimmt. Auf 16-Bit-Systemen (zum BeispielDOS) weisen int-Variablen 2 Bytes auf, auf 32-Bit-Systemen 4. Integervariablen besitzen demnach65536 beziehungsweise 4294967296 (=2 hoch 32) Ausprgungen.Die Familie der int-Datentypen umfat neben int noch die Datentypen short und long:

    shortDer Typ short umfat mindestens den Wertebereich des Typs char und maximal den des Typsint. In der Regel weisen Variablen vom Typ short zwei Bytes Ausdehnung auf und habendamit einen Wertebereich von -32768 bis +32767 (beziehungsweise von 0 bis 65535).

    l

    longIn vielen Fllen ist der Wertebereich von int zu gering. long verfgt ber einen mindestens sogroen Wertebereich wie int. Auf 16- und 32-Bit-Systemen belegen long-Variablen in derRegel vier Bytes Speicherplatz, was 4294967296 (=2 hoch 32) Ausprgungen entspricht.

    l

    Jeder der drei int-Typen kann zustzlich als signed oder unsigned spezifiziert werden. Diesigned-Datentypen weisen dieselbe Ausdehnung wie die unsigned-Typen auf und verfgen bereinen entsprechend vernderten Wertebereich. Im folgenden sind (bliche) Beispiele fr ganzzahligeVariablen auf 16-Bit-Systemen angefhrt:int x; // -32768

  • Die Gre der Basisdatentypen int, short und long ist nicht festgelegt.int weist die Gre eines Maschinenworts auf und ist mindestens so growie short, long hat mindestens die Ausdehnung von int.

    Vorige Seite: 4.2.2 Die Datentypen char und wchar_t Eine Ebene hher: 4.2 BasisdatentypenNchste Seite: 4.2.4 Fliekommadatentypen

    (c) Thomas Strasser, dpunkt 1997

    4.2.3 Die int -Datentypen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node38.htm (2 von 2) [10.09.2000 10:02:26]

  • Vorige Seite: 4.2.3 Die int-Datentypen Eine Ebene hher: 4.2 Basisdatentypen Nchste Seite: 4.2.5Der Datentyp void

    4.2.4 FliekommadatentypenDer Basis-Fliekommadatentyp ist float und nimmt reelle Zahlen auf. Reelle Zahlen werden(vereinfacht gesagt) durch eine ganze Zahl, die sogenannte Mantisse , und die Lage des Dezimalpunkts,bestimmt durch den Exponenten, dargestellt.

    Die Genauigkeit von Fliekommadatentypen ergibt sich naturgem aus der Gre dieser Mantisse undist compilerabhngig. Reicht die Genauigkeit von float nicht aus, so kann auf zwei andere Datentypenzurckgegriffen werden: double, der mindestens die Genauigkeit von float aufweist, und longdouble, der mindestens die Genauigkeit von double aufweist.

    Genaue Angaben bezglich der Gre und Genauigkeit von Datentypen sind in der Datei limits desjeweiligen Entwicklungssystems angefhrt.float pi; double erdanziehung;long double x; long double y;

    pi = 3.141592;erdanziehung = 0.980665e1;x = -123.456789012345678E-1234;y = 2.0E500;

    (c) Thomas Strasser, dpunkt 1997

    4.2.4 Fliekommadatentypen

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node39.htm [10.09.2000 10:02:36]

  • Vorige Seite: 4.2.4 Fliekommadatentypen Eine Ebene hher: 4.2 Basisdatentypen

    4.2.5 Der Datentyp void

    void ist ein spezieller Typ, der anzeigt, da kein Wert vorhanden ist. Es ist nicht mglich, ein Objektvom Typ void anzulegen. Vielmehr findet der Datentyp Anwendung bei der Deklaration von speziellenZeigern, von denen nicht bekannt ist, auf welchen Typ sie verweisen (Abschnitt 8.2.7), oder beiFunktionen, die keinen Rckgabewert liefern (Abschnitt 7.4.1). void initData(); // Funktion ohne Rueckgabewertvoid* ptr; // Zeiger ohne konkrete Typangabe

    (c) Thomas Strasser, dpunkt 1997

    4.2.5 Der Datentyp void

    file:///D|/Cool Stuff/old/ftp/preview/mysql/C++_Programmieren_mit_Stil/Cppbuch/node40.htm [10.09.2000 10:02:37]

  • Vorige Seite: 4.2.5 Der Datentyp void Eine Ebene hher: 4 Einfache Deklarationen und NchsteSeite: 4.4 Deklaration von Konstanten

    4.3 AufzhlungstypenEnumerationstypen werden auch als Aufzhlungstypen bezeichnet. Ein Aufzhlungstyp beschreibt seineWertemenge durch Aufzhlung all seiner Werte. Die Grammatik gibt den Typ enum wie folgt an:

    enum-specifier:

    enum identifieropt enumerator-listopt

    enumerator-list:

    enumerator-definition

    enumerator-list , enumerator-definition

    enumerator-definition:

    enumerator

    enumerator = constant-expression

    enumerator:

    identifier

    Alle in enumerator-list angegebenen Namen sind Bezeichner