Programmierung in C/C++ Mit einer grundlegenden Einführung in die Objektorientierung Univ.-Prof. Hon.-Prof. Dr. Dieter Roller Mit 134 Bildern Kontakt & Studium Band 682 Herausgeber: Prof. Dr. Birgit Baum Prof. Dr.-Ing. Dr.h.c. Wilfried J. Bartz Dipl.-Ing. Elmar Wippler experttüp] verlag
1. Einführung in die Softwareentwicklung 1 1.1. Vom Problem zum Programm 1 1.1.1. Problemanalyse 2 1.1.2. Entwurf eines Lösungsverfahrens 2 1.1.3. Verifikation des Algorithmus 4 1.1.4. Implementierung 5 1.1.5. Testen und Fehlerbeseitigung 6 1.1.6. Wartung 7 1.2. Entwurf und Beschreibung von Algorithmen 8 1.2.1. Vorgehen am Beispiel Minimumsuche 8 1.2.2. Formalisierte Sprachmittel 11 1.2.3. Syntaxdiagramme 18 1.3. Werkzeuge zur rechnergestützten Programmentwicklung 21 1.3.1. Bedeutung und Zielsetzung für CASE-Werkzeuge 21 1.3.2. Die Entwicklung von CASE 22 1.3.3. Architekturen und Grundkonzepte 23 1.3.4. Systemansätze für CASE 24 1.3.5. Spezielle Werkzeuge für die objektorientierte Softwareentwicklung 27 1.4. Programmiersprachen 28 1.4.1. Maschinensprachen 28 1.4.2. Assemblersprachen 28 1.4.3. Problemorientierte Programmiersprachen 29 2. Programmieren in C 33 2.1. Lexikalische Struktur von C und allgemeiner Programmaufbau 33 2.1.1. Bezeichner 35 2.1.2. Schlüsselwörter 36 2.1.3. Konstanten 38 2.1.4. Zeichenketten 41 2.1.5. Kommentare 43 2.1.6. Operatoren 43 2.1.7. Trennzeichen 48 2.1.8. Präprozessoranweisungen 48 2.1.9. Grundstruktureines C-Programms 49 2.2. Daten, Deklarationen, Grundtypen 50 2.2.1. Konstanten- und Variablendeklaration 50 2.2.2. Alternative Konstantendeklaration 52 2.2.3. Beschreibung der Grundtypen 54
2.3. Ausdrücke, Wertzuweisung 60 2.3.1. Auswertung von Ausdrücken 61 2.3.2. Implizite Standardkonvertierung 63 2.3.3. Explizite Typenkonvertierung (Casting) 64 2.3.4. Abkürzungen 66 2.4. Einführung in Zeiger 66 2.4.1. Adressoperator 67 2.4.2. Inhaltsoperator 68 2.5. Programmstruktur und Ablaufsteuerung 69 2.5.1. Anweisungsblöcke 69 2.5.2. Anweisungsende 69 2.5.3. Konstrukte zur Programmablaufsteuerung 69 2.6. Ein-/Ausgabe 76 2.6.1. Zeichenweise Ein-/Ausgabe mitgetchar und putchar 76 2.6.2. Formatierte Ausgabe mit printf 76 2.6.3. Formatierte Eingabe mit scanf 80 2.6.4. Formatierung im Speicher 83 2.7. Selbstdefinierte Datentypen 84 2.7.1. Skalare Datentypen 84 2.7.2. Selbstvereinbarte Typen 85 2.7.3. Typdefinition 87 2.8. Weitergehende Kontrollstrukturen 88 2.8.1. Aufzählungstypen für Zählvariablen 88 2.8.2. Mehrfachverzweigungen 88 2.9. Unterprogrammtechnik 91 2.9.1. Funktionen ohne Rückgabewert 93 2.9.2. Funktionen mit Rückgabewert 100 2.9.3. Rekursive Funktionen 102 2.9.4. Indirekte Rekursion 105 2.10. Strukturierte Datentypen 109 2.10.1. Felder 109 2.10.2. Verbünde 114 2.10.3. Unionen 118 2.10.4. Bitfelder 120 2.10.5. Zusammenfassung und Vergleich 121 2.11. Dateien 122 2.11.1. Eröffnen von Dateien 122 2.11.2. Eingabe von und Ausgabe in Dateien 124 2.11.3. Ein-/Ausgabepuffer 126 2.11.4. Schließen von Dateien 127 2.11.5. Temporäre Dateien 128
2.11.6. Status und Fehlerabfragen 128 2.12. Zeiger und verkettete Listen 129 2.12.1. Zeiger 133 2.12.2. Wertebereich von Zeigertypen 133 2.12.3. Operationen auf Zeigern 133 2.12.4. Die Zeigerkonstante NULL 133 2.12.5. Verkettete Listen 134 2.13. Modulares Programmieren 144 2.13.1. Schritte der Programmentstehung 145 2.13.2. Das Dienstprogramm make 146 2.13.2. Nutzung von Entwicklungsumgebungen 148 3. Einführung in das Paradigma der Objektorientierung 149 3.1. Einleitung 149 3.1.1. Softwarequalität 149 3.1.2. Ziele des Software-Engineering 149 3.2. Probleme und Prinzipien der Objektorientiertheit 151 3.2.1. Einführung 151 3.2.2. Klassifizierung 151 3.2.3. Modularität 152 3.3. Objektorientierte Softwareentwicklung 158 3.3.1. Daten und darauf anwendbare Aktionen 158 3.3.2. Objektorientierter Entwurf 159 3.3.3. Probleme der objektorientierten Entwicklung 160 3.3.4. Abstrakte Datentypen 162 3.3.5. Von Klassen zum Programm 163 3.4. Grundbegriffe der objektorientierten Programmierung 164 3.4.1. Objekte 164 3.4.2. Klassen 166 3.4.3. Geheimnisprinzip 167 3.4.4. Vererbung 168 3.4.5. Polymorphismus 171 3.4.6. Generizität 172 3.4.7. Überladen 173 3.4.8. Zusammenfassung 173 4. Objektorientierte Programmierung in C++ 174 4.1. Erweiterungen in C++ 174 4.1.1. Kommentare und Referenzen 174 4.1.2. Zusätzliche Schlüsselworte in C++ 174 4.2. Klassen 176
4.2.1. Definitionen 176 4.2.2. Attributdeklaration 179 4.2.3. Methodendeklaration 179 4.2.4. Attributedefinition 181 4.2.5. Methodendefinition 181 4.2.6. Friends 187 4.2.7. Überladen von Methoden 189 4.2.8. Konstruktoren und Destruktoren 189 4.2.9. Zeiger auf Objekte 192 4.2.10. Schnittstellenbenutzung 193 4.2.11. Zusammenfassung 194 4.3. Generizität 195 4.3.1. Parametrisierung von Klassen 195 4.3.2. Formale generische Parameter 195 4.3.3. Aktuelle generische Parameter 196 4.4. Vererbung 197 4.4.1. Einführung 197 4.4.2. Einfachvererbung 203 4.4.3. Mehrfachvererbung 207 4.5. Abstrakte Klassen 213 4.5.1. Rein virtuelle Methoden 213 4.5.2. Nutzen und Bedeutung von abstrakten Klassen 214 4.6. Polymorphismus 216 4.6.1. Einführung 216 4.6.2. Dynamisches Binden 216 4.6.3. Virtuelle Methoden 216 4.6.4. Operatoren überladen 217 4.7. Ein-/Ausgabeklassen 219 4.7.1. Eingangsströme und Ausgabeströme 219 4.7.2. Ausgabe fundamentaler Datentypen 219 4.7.3. Ausgabe benutzerdefinierter Typen 220 4.7.4. Eingabe fundamentaler Datentypen 221 4.7.5. Eingabe benutzerdefinierter Datentypen 221 4.7.6. Formatierung 222 4.7.7. Manipulatoren 222 4.7.9. Einfache Dateiein- und Dateiausgabe 225 4.7.10. Stream-Klassenhierarchie 225 4.8. Zusammenführung von Objekten 226 4.8.1. Das Programm main 226 4.8.2. Spaltung in Header und Ausführungscode 228 4.8.3. Eigene Modulbibliotheken 230 4.9. C-Konstrukte in C++ 231
4.9.1. Funktionen 231 4.9.2. Zeiger 232 4.9.3. Verbünde 234 4.9 4. Strings 234 4.10. Programmierkonventionen 234 4.10.1. Bezeichner 234 4.10.2. Methodenbezeichner 235 4.10.3. Klassen-Headerdateien 235 4.10.4. Inline-Methoden 237 4.10.5. Nutzung von const und enum 237 4.10.6. Nutzung von Referenzen 237 4.10.7. Nutzung von Friends 238 4.10.8. Assertions 238 4.10.9. Implizite Typkonvertierung 239 4.10.10. Weitere Richtlinien 239 4.11. ANSI C++ Erweiterungen 240 4.11.1. Exception Handling 240 4.11.2. Namensräume 241 4.11.3. Run-time-Typinformation 242 4.11.4. Typkonvertierungen, erweitertes Casting 242 4.11.5. Fundamentale Datentypen 243 5. Literaturverzeichnis 244 6. Stichwortverzeichnis 247