lehrerbibliothek.deDatenschutzerklärung
Softwaretechnik in C und C++ Modulare, objektorientierte und generische Programmierung <b>Das Kompendium</b>
4. Auflage

ISO-C90
ISO-C99
ISO-C++98
MS-C++.NET

Alle Programmbeispiele auf CD-ROM
Softwaretechnik in C und C++
Modulare, objektorientierte und generische Programmierung


Das Kompendium

4. Auflage



ISO-C90

ISO-C99

ISO-C++98

MS-C++.NET



Alle Programmbeispiele auf CD-ROM





Rolf Isernhagen, Hartmut Helmke

Carl Hanser Verlag
EAN: 9783446227156 (ISBN: 3-446-22715-6)
946 Seiten, hardcover, 17 x 24cm, Februar, 2004, inkl. CD-ROM

EUR 49,90
alle Angaben ohne Gewähr

Umschlagtext
Die Sprachen C und C++ sind weltweit standardisiert und in Ausbildung und Praxis weit verbreitet. Sie gehören zum Handwerkszeug jedes Informatikers und werden häufig nebeneinander benutzt.



Dieses Kompendium behandelt sowohl die Unterschiede und Gemeinsamkeiten der drei ISO-Sprachstandards C90, C99 und C++ mit deren Standardbibliotheken als auch deren wesentliche Programmier- und Entwurfstechniken. Im Mittelpunkt stehen dabei die Themen modulare, objektorientierte und generische Programmierung. Während C++ alle drei Techniken explizit unterstützt, trifft das für C nicht zu. Es werden allerdings Möglichkeiten aufgezeigt, dies teilweise zu kompensieren.



Die vorliegende vierte Auflage wurde gründlich überarbeitet, neu strukturiert und um den Teil »Die Sprache C++.NET und ihre Bibliothek« erweitert. Hier wird der sinnvolle Einsatz der neuen Sprachelemente von C++.NET vorgestellt und gezeigt, wie vorhandener »alter« mit Quellcode für C++.NET integriert wird. Die Autoren gehen auch darauf ein, ob und wie auch mit C++.NET noch portabler Code geschrieben werden kann.



Auf der CD-ROM:

• Quellcode der Programmbeispiele des Buches, die Lösungen zu den Übungen des Buches

• C++-Draft-Standard

• C99-Draft-Standard

• Foliensatz für Dozenten
Rezension
Für Informatiker und Programmierer, die bereits Grundkenntnisse in anderen Programmiersprachen besitzen, ist dieses umfangreiche Kompendium der ideale Einstieg in die Programmierung mit C und C++. Auf beinahe 1000 Seiten vermitteln die Autoren softwaretechnische Grundkenntnisse, erläutern grundlegende Datenstrukturen und zugehörige Algorithmen. Doch nicht nur Einsteiger profitieren von dem geballten Wissen, auch Fortgeschrittene finden in diesem Buch ein hervorragendes Nachschlagewerk, das die Kniffe und Tricks im Umgang mit den Standardprogrammiersprachen erklärt.

Wahrlich ein Kompendium, das Vergleiche mit den Büchern von Bjarne Stroustrup (dem Erfinder von C++) nicht zu scheuen braucht!

Florian Schimandl, lehrerbibliothek.de
Verlagsinfo
Nicht kurz, aber knackig:
Grundlagenwerk zur Softwaretechnik in C und C++

Dieses Kompendium behandelt die Unterschiede und Gemeinsamkeiten der ISO-Sprachstandards C90, C99 und C++ 98 mit ihren Standardbibliotheken sowie ihre wesentlichen Programmier- und Entwurfstechniken.

Die 4. Auflage wurde um einen Teil zur Sprache C++.NET und ihrer Bibliothek erweitert.

Auf CD-ROM:
- Der Quellcode der Programmbeipiele
- die Lösungen zu den Übungen
- zusätzliche Übungen mit Lösungen
- der C++-Draft-Standard
- der C99-Draft-Standard und ein Foliensatz für Dozenten
Inhaltsverzeichnis
============
Inhaltsübersicht
============


I C90, C99, Better-C und Modulare Softwareentwicklung

1 C90, C99 und Better-C
C90 und C99 unter besonderer Berücksichtigung der Aufwärtskompatibilität zu C++, Clean-C als Schnittmenge von C und C++ und Better-C als Erweiterung von
C um einige Bestandteile von C++, Gegenüberstellung der Unterschiede von C90, C99 und C++.

2 C-Standardbibliothek
Kompakte Übersicht über die Funktionalität der Bibliotheksmodule, die sich dem Benutzer in Form von Header-Dateien präsentieren, die jeweils Deklarationen von Funktionen, Variablen und Konstanten sowie Typdefinitionen enthalten können.

3 Modulare Programmierung in C und in Better-C
Es wird ein Konzept zur Modularen und Generischen Programmierung in C vorgestellt, mit dem entsprechende Defizite der Sprache kompensiert werden können.
Darüber hinaus werden die C++-Namensbereiche als ideales Better-C-Sprachmittel zur Unterstützung der Modularen Programmierung vorgestellt.

II Algorithmen, Datenstrukturen, ADTs, Container

4 Sortieren, Suchen, Rekursion und Zeitkomplexität
Zunächst werden die Zeitkomplexität als qualitativer Maßstab zur Bewertung von Algorithmen eingeführt und eine grafische Methode zur Analyse rekursiver
Algorithmen präsentiert. Dann werden Algorithmen für das Sortieren und Suchen in Arrays vorgestellt und analysiert.

5 Dynamische Datenstrukturen
In diesem Kapitel werden wichtige Datenstrukturen wie Listen, Bäume, AVLBäume, B-Bäume, Heaps und Hashstrukturen zusammen mit den entsprechenden
Algorithmen entwickelt und in wiederverwendbare Generische Module verpackt.

6 Container-Strukturen
Es werden typische Containerstrukturen wie stack, queue, priorityqueue, set, multiset, map, multimap und vector durch Abbilden auf die im vorigen Kapitel
behandelten Datenstrukturen entwickelt.

7 Automaten in der Softwaretechnik (ausgelagert auf die CD-ROM)
Es werden Automatenmodelle – Endliche Automaten und Kellerautomaten – als Grundlage des Softwareentwurfs vorgestellt. Sie spielen z.B. eine wichtige Rolle beim Erkennen von einfachen Mustern (Scanner) und beim Erkennen von komplexeren Mustern (Parser).

III Die Sprache C++ und ihre Softwaretechniken

8 Klassen als Abstrakte Datentypen
Hier werden die Klassen als Mittel der Sprache C++ zur Beschreibung Abstrakter Datentypen vorgestellt. Sie bilden die Basis der Objektorientierten Programmierung.

9 Objektorientierte Programmierung
Hier werden die Bestandteile der Sprache C++ und deren Verwendung im Detail behandelt, die insbesondere die Objektorientierte Programmierung unterstützen. Dabei geht es im Wesentlichen um die Themengebiete Vererbung und Polymorphismus.

10 Generische Programmierung
Hier werden die Bestandteile der Sprache C++ und deren Verwendung im Detail behandelt, die insbesondere die Generische Programmierung unterstützen. Dabei
geht es im Wesentlichen um die Entwicklung und Verwendung von Templates (Schablonen) für Klassen und für Funktionen.

11 C++-Standardbibliothek
Es wird ein Überblick über die sehr umfangreiche Standardbibliothek der Sprache C++ gegeben, und die wichtigsten Teile dieser Bibliothek – insbesondere die Unterstützung für das Arbeiten mit Eingabe- und Ausgabeströmen, mit Strings und mit Containern – werden im Detail vorgestellt und deren Anwendung an vielen Beispielen demonstriert.

IV Die Sprache C++.NET und ihre Bibliothek

12 C++.NET: Verwalteter Code, Objektmodell und Bibliothek
Hier werden die Grundlagen von C++.NET behandelt: Die Erweiterungen zum Arbeiten mit verwaltetem Code, das Programmiermodell mit der Basisklasse
Object sowie die .NET-Framework-Library.

13 Programmieren mit Managed Extensions
In diesem Kapitel geht es primär um die Anwendung der vorher behandelten Erweiterungen und um das nebeneinander Verwenden von verwaltetem und nicht
verwaltetem Code sowie um Besonderheiten der Ausnahmebehandlung unter .NET.


=============
Inhaltsverzeichnis
=============


Vorwort zur 4. Auflage

Vorwort zur 1. Auflage

Hinweise für den Leser

Inhaltsübersicht


I C90, C99, Better-C und Modulare Softwareentwicklung


1 C90, C99 und Better-C

1.1 Einführung
1.1.1 Verschiedene Standards und Dialekte
1.1.2 Clean-C und Better-C
1.1.3 Beispielprogramme
1.2 Aufbau der Sprache
1.2.1 Lexikalische und syntaktische Struktur
1.2.2 Formale Beschreibung (Syntaxnotation)
1.2.3 Lexikalische Elemente (Symbole, Token)
1.2.4 Trennzeichen (White Spaces) und Kommentare
1.2.5 Unterschiede zwischen C99, C90 und C++98
1.3 Daten, Operatoren, Ausdrücke, Anweisungen
1.3.1 Vordefinierte Datentypen
1.3.2 Operatoren für Elementare Datentypen
1.3.3 Ausdrücke
1.3.4 Prioritäten von Operatoren
1.3.5 Explizite und implizite Typkonvertierungen
1.3.6 Arbeiten mit Zahlen
1.3.7 Arbeiten mit Zeichen
1.3.8 Arbeiten mit Booleschen Ausdrücken
1.3.9 Aufzählungstypen
1.3.10 Ausdrücke als Anweisungen, Mehrfachzuweisungen
1.3.11 Bedingte Ausdrücke und bedingte Anweisungen
1.3.12 Unterschiede zwischen C99, C90 und C++98
1.3.13 Übungen
1.4 Steueranweisungen
1.4.1 Übersicht
1.4.2 Verbundanweisung (compound-statement)
1.4.3 Verzweigungen
1.4.4 Wiederholungen
1.4.5 Marken und Sprünge
1.4.6 Zusammenfassung
1.4.7 Unterschiede zwischen C99, C90 und C++98
1.4.8 Übungen
1.5 Punktionen
1.5.1 Grundlagen
1.5.2 Definition und Deklaration von Funktionen
1.5.3 Rekursive Algorithmen und Funktionen
1.5.4 Inline-Funktionen
1.5.5 Variable Anzahl von Parametern
1.5.6 C-Bibliotheksfunktionen
1.5.7 Unterschiede zwischen C99, C90 und C++98
1.5.8 Übungen
1.6 Benutzerdefinierte Datentypen
1.6.1 Zeiger, Adressen, Vektoren
1.6.2 Strings (Zeichenketten)
1.6.3 Mehrdimensionale Vektoren
1.6.4 Strukturen
1.6.5 Vereinigungen (Unionen)
1.6.6 Verwendung des Attributs const
1.6.7 Parameter- und Rückgabetypen
1.6.8 Zeiger auf Funktionen
1.6.9 Zeiger und Zeigerkonvertierungen
1.6.10 Unterschiede zwischen C99, C90 und C++98
1.6.11 Übungen
1.7 Werte- und Zeigersemantik
1.7.1 Prinzip der Speicherverwaltung
1.7.2 Zeigersemantik beim Arbeiten mit Vektoren
1.7.3 Werte- und Zeigersemantik bei Strukturen
1.7.4 Werte- und Zeigersemantik bei der Funktionsrückgabe
1.7.5 Dynamische Zeichenketten (Strings)
1.7.6 Komplexe Deklarationen
1.7.7 Unterschiede zwischen C99, C90 und C++98
1.7.8 Übungen
1.8 Eingabe und Ausgabe von Daten
1.8.1 Überblick
1.8.2 Arbeiten mit den Standardgeräten
1.8.3 Arbeiten mit Textdateien
1.8.4 Datenformatierung
1.8.5 Dateien mit Blockstruktur
1.8.6 Strings als Medium für formatierte Ein- und Ausgabe
1.8.7 Anzeige und Abfrage von EA-Zuständen
1.8.8 Weitere Funktionen
1.8.9 Unterschiede zwischen C99, C90 und C++98
1.8.10 Übungen
1.9 Präprozessor
1.9.1 Einfügen von Dateien
1.9.2 Ersetzen von Textstellen
1.9.3 Bedingte Einfügung, bedingte Übersetzung
1.9.4 Definition von Makros
1.9.5 Vordefinierte Namen
1.9.6 Sonstiges
1.9.7 Zusammenfassung und Bewertung
1.9.8 Unterschiede zwischen C99, C90 und C++98
1.9.9 Übungen
1.10 Programmstruktur und Speicherklassen
1.10.1 Dateien, Geltungsbereiche, Lebensdauer
1.10.2 Deklarationen und Definitionen
1.10.3 Geltungsbereich von Bezeichnern
1.10.4 Lebensdauer von Variablenwerten
1.10.5 Zusammenfassung und Ergänzungen
1.10.6 Module: Definitions- und Implementationsdateien
1.10.7 Allgemeiner Aufbau von C-Programmen
1.10.8 Unterschiede zwischen C99, C90 und C++98
1.10.9 Übungen
1.11 Fehler- und Ausnahmebehandlung
1.11.1 Verwendung des Makros assert
1.11.2 Fehler-Return-Codes bei Funktionen
1.11.3 Modulbehaftete globale Statusvariable
1.11.4 C++-Exception-Handling-Konzept
1.11.5 Übungen

2 C-Standardbibliothek

2.1 Kurzübersicht über die Gesamtbibliothek
2.2 Fehlerdiagnostik:
2.3 Komplexe Arithmetik:
2.4 Zeichenoperationen:
2.5 Fehlererkennung:
2.6 Gleitkomma-Arithmetik:
2.7 Grenzwerte für Gleitkommatypen:
2.8 Definition von Wortsymbolen:
2.9 Definition von Wortsymbolen:
2.10 Grenzwerte für Ganzzahl-Typen:
2.11 Lokale (nationale) Definitionen:
2.12 Mathematische Funktionen:
2.13 Globale Sprünge:
2.14 Ausnahmebehandlung:
2.15 Variable Parameterlisten:
2.16 Boolesche Arithmetik:
2.17 Allgemeine Definitionen:
2.18 Erweiterte Integer-Typen:
2.19 Ein- und Ausgabe:
2.20 Hilfsfunktionen:
2.21 String-Operationen:
2.22 Typ-generische Makros:
2.23 Datum und Zeit:
2.24 wide-char und Multibyte-Zeichen:
2.25 Klassifizierung von wctype-Zeichen:

3 Modulare Programmierung in C und in Better-C

3.1 Module und Modulschnittstellen
3.1.1 Softwareentwurf und Modularisierung
3.1.2 Geheimnisprinzip. Datenkapselung, Abstrakte Datentypen
3.1.3 Realisierung von Abstrakten Datentypen in C
3.1.4 Realisierung von generischen Modulen in C
3.2 Fallstudie 1: Komplexe Arithmetik
3.2.1 Spezifikation
3.2.2 Implementierung
3.2.3 Anwendung
3.3 Fallstudie 2: Strings
3.3.1 Spezifikation
3.3.2 Implementierung
3.3.3 Anwendung
3.4 Fallstudie 3: Set (Menge)
3.4.1 Allgemeine Spezifikation
3.4.2 Modul Set, Version 0: Kleiner Wertebereich
3.4.3 Modul Set, Version 1: Vergrößerung des Wertebereichs
3.4.4 Modul Set, Version 2: Einstellbarer Wertebereich
3.4.5 Modul Set, Version 3: Alternative Realisierung
3.4.6 Modul Set, Version 4: Ein generisches Modul
3.5 Fallstudie 4: Generische Sortierte Liste
3.5.1 Spezifikation
3.5.2 Implementierung
3.5.3 Anwendung
3.5.4 Anpassung an Anwendungen
3.6 Better-C: Namensbereiche
3.6.1 Grundlagen: Definition und Benutzung
3.6.2 Erweiterung von Namensbereichen
3.6.3 Alias (Synonym) für Namensbereiche
3.6.4 Using-Direktive und Using-Deklaration
3.6.5 Anonyme Namensbereiche
3.6.6 Anwendung von Namensbereichen
3.6.7 Portierung von C-Modulen
3.7 Übungen


II Algorithmen, Datenstrukturen, ADTs, Container


4 Sortieren, Suchen, Rekursion und Zeitkomplexität

4.1 Zeitkomplexität
4.2 Analyse rekursiver Algorithmen
4.3 Einfache Sortieralgorithmen
4.4 Schnelle Sortieralgorithmen
4.5 Laufzeitmessungen an Sortieralgorithmen
4.6 Lineares Suchen
4.7 Binäres Suchen
4.8 Die Macht der Zeitkomplexität

5 Dynamische Datenstrukturen

5.1 Lineare Listen, Stapel und Schlangen
5.1.1 Zeigernotation und Heapverwaltung
5.1.2 Lineare einfach gekettete Listen
5.1.3 Lineare doppelt gekettete Listen
5.1.4 Stapelspeicher
5.1.5 Warteschlange
5.1.6 ADT List (Unsortierte Liste)
5.1.7 Prioritätswarteschlange
5.1.8 Übungen
5.1.9 ADT SList (Sortierte Liste)
5.2 Binäre Wilde Bäume
5.2.1 Grundlagen
5.2.2 Traversieren
5.2.3 Einfügen
5.2.4 Suchen
5.2.5 Löschen
5.2.6 Übungen
5.2.7 ADT Tree (Binärer Suchbaum)
5.2.8 Fallstudie Querverweis-Listengenerator
5.3 Binäre Ausgeglichene Bäume
5.3.1 Definition der Ausgeglichenheit und Konzept
5.3.2 Einfügen
5.3.3 Löschen
5.3.4 ADT Avl (Ausgeglichener Binärer Suchbaum)
5.4 Vielweg-Bäume (B-Bäume)
5.4.1 Einführung und Konzept
5.4.2 Datenstrukturen
5.4.3 Traversieren
5.4.4 Einfügen
5.4.5 Löschen
5.4.6 Demoprogramm
5.4.7 Übungen
5.5 Heap-Strukturen
5.6 Hashverfahren
5.6.1 Allgemeines
5.6.2 Statische Hashverfahren
5.6.3 Halbdynamische Hashverfahren
5.6.4 Dynamische Hashverfahren
5.6.5 Zusammenfassung

6 Container-Strukturen

6.1 Container-Strukturen, Überblick
6.2 Realisierung von Container-Strukturen
6.2.1 Stack, Queue und Priorityqueue
6.2.2 Set und Multiset
6.2.3 Map, Multimap und Vector
6.3 Anwendungsbeispiele
6.3.1 Test- und Demoprogramm
6.3.2 Anwendungsbeispiel Textanalyse
6.3.3 Anwendungsbeispiel Anagramme
6.4 Übungen

7 Automaten in der Softwaretechnik (ausgelagert auf die CD-ROM)


III Die Sprache C++ und ihre Softwaretechniken


8 Klassen als Abstrakte Datentypen

8.1 Von C nach C++
8.2 Einführung, Klassen als Abstrakte Datentypen
8.2.1 Von der Struktur zur Klasse
8.2.2 Grundlagen
8.3 Konstruktoren und Destruktoren
8.3.1 Verschiedene Arten von Konstruktoren
8.3.2 Implizite Erzeugung von Konstruktoren
8.3.3 Die Bedeutung des Kopierkonstruktors
8.3.4 Die Bedeutung von Umwandlungskonstruktoren
8.3.5 Destruktoren, implizite Erzeugung von Destruktoren
8.4 Der Zuweisungsoperator
8.4.1 Implizite Erzeugung
8.4.2 Implementierung - das Prinzip
8.5 Zugriffsrechte
8.6 Minimale Standardschnittstelle und Nice Class
8.7 Konstante Methoden konstante Objekte
8.8 UML-Klassendiagramme: Modelle der Programmstruktur
8.8.1 Modellierung von Klassen mit UML
8.8.2 Modellierung von Beziehungen zwischen Klassen
8.9 Mitglieder und Freunde
8.9.1 Fnenrf-Beziehungen
8.9.2 Beispiel: Fnenrf-Klassen
8.9.3 Beispiel: Komplexe Arithmetik, Version
8.10 Überladen von Operatoren
8.10.1 Beispiel: Komplexe Arithmetik, Version
8.10.2 Hinweise zum Überladen von Operatoren
8.10.3 Überladbare und nicht überladbare Operatoren
8.10.4 Überladen von Konvertierungsoperatoren
8.11 Dynamische verwaltete Daten in Klassen
8.11.1 Beispiel: Komplexe Arithmetik, Version
8.11.2 Implizite Verwendung des Kopierkonstruktors
8.11.3 Überladen des Zuweisungsoperators
8.12 Effizienzbetrachtungen: Laufzeiteffizienz
8.12.1 Grundlegende Überlegungen
8.12.2 Beispiel: Komplexe Arithmetik, Version
8.13 Statische Elemente in einer Klasse
8.14 Schachtelung von Klassen
8.15 Funktionsobjekte
8.16 Zusammenfassung: Hinweise und Regeln
8.17 Übungen

9 Objektorientierte Programmierung

9.1 Vererbung: Erweiterung von Klassen
9.1.1 Grundlagen
9.1.2 Konstruktoren, Destruktor und Zuweisungsoperator
9.1.3 Typkompatibilität in Klassenhierarchien
9.1.4 Virtuelle Funktionen
9.1.5 Öffentliches und Privates Erben
9.1.6 Privates Erben und Benutzen
9.1.7 Rein Virtuelle Funktionen und Abstrakte Klassen
9.1.8 UML-Klassendiagramme: Vererbungshierarchien
9.1.9 Übungen
9.2 Polymorphie: Dynamisches Binden
9.2.1 Dynamischer Typ, dynamisches Binden
9.2.2 Heterogene Datenstrukturen
9.2.3 Virtuelle Destruktoren
9.2.4 Ein Klassensystem für grafische Objekte, Vers. 1
9.2.5 Objektschachtelung: Grafische Objekte, Vers. 2
9.2.6 Zwei Aspekte der Polymorphie: heterogen und genetisch
9.2.7 Polymorphe Container-Strukturen
9.2.8 Übungen
9.3 Die richtige Anwendung der Vererbung
9.3.1 Verschiedene Sichten und Probleme
9.3.2 Schnittstellen-Klassen
9.3.3 Abstrakte und nicht abstrakte Basisklassen
9.3.4 Zuweisungsoperatoren in Klassen mit polymorphen Zeigern
9.3.5 Übungen
9.4 Mehrfachvererbung
9.4.1 Grundlagen
9.4.2 Verwendung nicht virtueller Basisklassen
9.4.3 Verwendung virtueller Basisklassen
9.4.4 Virtuelle Methoden in virtuellen Basisklassen
9.4.5 Fallstudie Querverweis-Listengenerator
9.4.6 Übungen
9.5 Typkonvertierung, Laufzeit-Typinformation
9.5.1 Die Grundidee
9.5.2 Syntax und Semantik der Sprachkonstrukte
9.5.3 Zusammenfassung
9.6 Ausnahmebehandlung (Exception-Handling)
9.6.1 Grundlagen
9.6.2 Syntax und Semantik der Sprachkonstrukte
9.6.3 Zusammenfassung und Empfehlungen
9.6.4 Übungen
9.7 Besondere Programmiertechniken
9.7.1 Referenzzählung (Reference-Counting)
9.7.2 Up-Calls
9.7.3 Botschaften und Botschaftsinterpreter

10 Generische Programmierung

10.1 Klassen-Templates: Generische Strukturen
10.1.1 Grundlagen
10.1.2 UML-Klassendiagramme: Klassenschablonen
10.1.3 Eine generische Container-Bibliothek
10.1.4 Spezialisierung von Templates
10.1.5 Eine spezialisierte Container-Bibliothek
10.1.6 Exception Handling am Beispiel eines Stack-Templates
10.1.7 Übungen
10.2 Funktions- und Element-Templates
10.2.1 Funktions-Templates
10.2.2 Element-Templates
10.3 Besondere Programmiertechniken
10.3.1 Smart Pointer
10.3.2 Iteratoren
10.3.3 Generische Algorithmen
10.4 Entwicklung einer kleinen Container-Bibliothek
10.4.1 Konzept und Überblick
10.4.2 Die Klassen List, SList und Tree
10.4.3 Die Containerklassen Stack, Queue und Prio
10.4.4 Set und Multiset
10.4.5 Die Containerklassen Map, Multimap und Vector
10.4.6 Test- und Demoprogramm für die Containerklassen
10.5 Template-Metaprogrammierung
10.5.1 Compile-Zeit-Berechnungen
10.5.2 Laufzeit- und Compile-Zeit-Polymorphismus

11 C++-Standardbibliothek

11.1 Übersicht
11.2 Allgemeine Dienste
11.2.1 Vergleichsoperatoren
11.2.2 Paare
11.2.3 Auto-Zeiger
11.2.4 Übungen
11.3 Strings
11.3.1 Konzept und Übersicht
11.3.2 Funktionalität
11.4 Ein- und Ausgabe (EA)
11.4.1 Vorteile des neuen EA-Konzeptes
11.4.2 EA im Standardformat mit Standardgeräten
11.4.3 Struktur & Funktionalität der Stream-IO-Bibliothek
11.4.4 Formatierung
11.4.5 EA-Funktionen
11.4.6 Arbeiten mit Dateien
11.4.7 Strings als Ein- und Ausgabemedium
11.4.8 Anzeige & Abfrage von Zuständen, Fehlerbehandlung
11.4.9 Eigene Definitionen, weitere Funktionen
11.5 Container
11.5.1 Das Konzept der Standard Template Library (STL)
11.5.2 Einführung
11.5.3 Gemeinsame Definitionen
11.5.4 Container für Sequenzen
11.5.5 Containeradapter für Sequenzen
11.5.6 Container für Assoziationen
11.5.7 Die Containerklasse bitset
11.5.8 Übungen
11.6 Iteratoren
11.6.1 Operationen und Klassifizierung
11.6.2 Iteratoren als Container-Schnittstellen
11.6.3 Reverse-Iteratoren
11.6.4 Insert-Iteratoren
11.6.5 Stream-Iteratoren
11.6.6 Selbst definierte Iteratoren (Iterator-Adapter)
11.7 Funktionsobjekte
11.7.1 Verwendung von Funktionsobjekten
11.7.2 Funktionsobjekte der Standardbibliothek
11.7.3 Funktionsadapter der Standardbibliothek
11.8 Algorithmen: globale generische Funktionen
11.8.1 Nicht modifizierende sequenzielle Operationen
11.8.2 Modifizierende sequenzielle Operationen
11.8.3 Sortieren, Suchen und verwandte Operationen
11.8.4 Mengenoperationen
11.8.5 Heap-bezogene Operationen
11.8.6 Minimax bestimmen und lexikografische Vergleiche
11.8.7 Permutieren
11.8.8 Anwendungsbeispiel Textanalyse
11.8.9 Übungen
11.9 Weitere Dienstleistungen
11.9.1 Ausnahmebehandlung
11.9.2 Grenzwerte der Implementierung
11.9.3 Speichermodelle
11.9.4 Internationalisierung
11.9.5 Numerik


IV Die Sprache C++.NET und ihre Bibliothek


12 C++.NET: Verwalteter Code, Objektmodell und Bibliothek

12.1 Von C++98 nach C++.NET - ein Überblick
12.1.1 Das Common Language Runtime-System
12.1.2 Managed Code - Arbeiten mit verwalteten Objekten
12.1.3 .NET-Datentypen und .NET Framework Library
12.2 Klassen im Namensraum System
12.2.1 Die Klasse Object und das .NET-Programmiermodell
12.2.2 Die Klasse Console - Arbeiten mit der Konsole-E/A
12.2.3 Arbeiten mit Dateien
12.2.4 Die Klasse String
12.2.5 Container-Klassen in System::Collections
12.2.6 Übungen
12.3 Verwaltete Objekte unter .NET
12.3.1 Das Schlüsselwort__gc
12.3.2 Das Schlüsselwort__nogc
12.3.3 Das Schlüsselwort__value
12.3.4 Das Schlüsselwort__box, Boxing und Unboxing
12.3.5 Das Schlüsselwort__pin
12.4 Vererbung und Typkontrolle unter .NET
12.4.1 Das Schlüsselwort__abstract
12.4.2 Das Schlüsselwort__interface
12.4.3 Das Schlüsselwort__sealed
12.4.4 Das Schlüsselwort__typeof
12.4.5 Das Schlüsselwort__try_cast
12.5 Ereignisbehandlung unter .NET
12.5.1 Das Schlüsselwort__delegate
12.5.2 Das Schlüsselwort__event
12.5.3 Anwendung für Delegates
12.5.4 Anwendung für Events
12.6 Weitere .NET-Schlüsselwörter
12.6.1 Das Schlüsselwort__property
12.6.2 Das Schlüsselwort__identifier
12.7 .NET-Datentypen
12.7.1 Einfache .NET-Datentypen
12.7.2 Verwaltete Arrays
12.8 Operatoren überladen unter .NET
12.9 Übungen

13 Programmieren mit Managed Extensions

13.1 Fallstudie: Ein Botschaftsinterpreter
13.2 Mischen von verwaltetem und nicht verwaltetem Code
13.2.1 Speicherverwaltung
13.2.2 Destruktor und verwaltete Objekte
13.2.3 Beispiel
13.2.4 Verwaltete Zeiger in nicht verwalteten Typen
13.3 Ausnahmebehandlung
13.4 Die STL in Zusammenhang mit Managed Code
13.5 Details der C++. NET-Garbage Collection
13.6 Portabler Code trotz Managed Extensions?
13.6.1 Grundsatz-Überlegungen
13.6.2 Portabilität der neuen Schlüsselworte
13.6.3 Objekte des Namensraums System
13.6.4 Weitere Aspekte der Portabiliät
13.7 Übungen

Literaturverzeichnis

Stichwortverzeichnis


> Die folgenden Teile befinden sich auf der CD-ROM <

Texte auf der CD-ROM (Buch-CD.ps und Buch-CD.pdf)


C/C++-Textverzeichnis

Abbildungsverzeichnis

Tabellenverzeichnis

7 Automaten in der Softwaretechnik

7.1 Automaten und Sprachen
7.2 Endliche Automaten und Reguläre Sprachen
7.3 Lexikalische Analyse, Scanner
7.3.1 Scanner für Zahlen
7.3.2 Scanner für Kommentare
7.3.3 Ein Scanner für die kleine Sprache ML2
7.4 Kellerautomaten und Kontextfreie Sprachen
7.5 Syntaktische Analyse, Parser
7.5.1 EBNF-Notation und Syntaxdiagramme
7.5.2 Parser
7.5.3 Die Sprachen ML1 und ML2 und ihre Parser

Anhänge: Lösungen zu den Übungen

A Lösungen zu Kapitel
A.l Lösungen zu Abschnitt 1.3
A.2 Lösungen zu Abschnitt 1.4
A.3 Lösungen zu Abschnitt 1.5
A.4 Lösungen zu Abschnitt 1.6
A.5 Lösungen zu Abschnitt 1.7
A.6 Lösungen zu Abschnitt 1.8
A.7 Lösungen zu Abschnitt 1.9
A.8 Lösungen zu Abschnitt 1.10
A.9 Lösungen zu Abschnitt 1.11

B Lösungen zu Kapitel

C Lösungen zu Kapitel

C.1 Lösungen zu Abschnitt 5.1
C.2 Lösungen zu Abschnitt 5.2
C.3 Lösungen zu Abschnitt 5.4

D Lösungen zu Kapitel 6

E Lösungen zu Kapitel 8

F Lösungen zu Kapitel 9

F.1 Lösungen zu Abschnitt 9.1
F.2 Lösungen zu Abschnitt 9.2
F.3 Lösungen zu Abschnitt 9.3
F.4 Lösungen zu Abschnitt 9.4
F.5 Lösungen zu Abschnitt 9.6

G Lösungen zu Kapitel 10

H Lösungen zu Kapitel 11

H.1 Lösungen zu Abschnitt 11.2
H.2 Lösungen zu Abschnitt 11.5
H.3 Lösungen zu Abschnitt 11.8

I Lösungen zu Kapitel 12

J Lösungen zu Kapitel 13