Inhaltsverzeichnis
| 1
Grundlagen in C++
1.1 Die Entstehung von C++ 1.1.1 Aufbau von C++ Erweiterungen von C
1.2 Erste
Schritte der C++-Programmierung
Objektorientierte Unterstützung Stärken von C++ Schwächen von C++ Vergleich mit anderen Sprachen 1.2.1 Ein Programm erzeugen mit einem Kommandozeilen-Compiler GNU-g++-Compiler
1.2.2
Ausführen
des Programms
Microsoft Visual C++ (Kommandozeile) Borlands Free Command Line Tools 1.2.3 Ein Programm erzeugen mit einer IDE 1.3 Symbole von C++ 1.3.1 Bezeichner 1.3.2 Schlüsselwörter 1.3.3 Literale Ganzzahlen
1.3.4
Einfache
Begrenzer
Fließkommazahlen Einzelne Zeichen Zeichenketten Das Semikolon (;)
1.4
Basisdatentypen
Komma Geschweifte Klammern Das Gleichheitszeichen (=) 1.4.1 Deklaration und Definition 1.4.2 Was ist eine Variable? 1.4.3 Der Datentyp bool 1.4.4 Der Datentyp char Breite Zeichen -
wchar_t
1.4.5 Die Datentypen
int
Die int-Typen long
und
short
1.4.6
Gleitkommazahlen
float, double und long double
signed und unsigned Rechnen mit
Gleitkommazahlen(?)
1.4.7 Limits für
Ganzzahl- und Gleitpunktdatentypen
1.5 Konstanten 1.6 Standard Ein-/Ausgabe-Streams 1.6.1 Die neuen Streams - cout, cin, cerr, clog 1.6.2 Ausgabe mit cout 1.6.3 Ausgabe mit cerr 1.6.4 Eingabe mit cin Einlesen von
Zeichen und
Zeichenkette
1.7
Operatoren
1.7.1 Arithmetische Operatoren 1.7.2 Inkrement- und Dekrement-Operator 1.7.3 Bit-Operatoren Bitweises UND
1.7.4
Weitere
Operatoren
Bitweises ODER Bitweises XOR Bitweises Komplement Links- bzw. Rechtsverschiebung 1.8 Kommentare 1.9 Kontrollstrukturen 1.9.1 Verzweigungen (Selektionen) Die if ...
else-Anweisung
1.9.2
Schleifen
(Iterationen)
Vergleichsoperatoren Bedingungsoperator ?: Logische Operatoren Die switch-Anweisung Die while-Anweisung
1.9.3
Sprunganweisungen
Die do ... while-Anweisung Die for-Anweisung Die break-Anweisung
1.10
Funktionen
Die continue-Anweisung 1.10.1 Deklaration und Definition 1.10.2 Funktionsaufruf und Parameterübergabe Parameterübergabe
an Funktionen
(call-by-value)
1.10.3 Lokale und
Globale Variablen
Rückgabewert von Funktionen 1.10.4 Standardparameter 1.10.5 Funktionen überladen 1.10.6 Inline-Funktionen 1.10.7 Rekursionen 1.10.8 main-Funktion 1.11 Präprozessor-Direktiven 1.11.1 Die #define-Direktive #define oder const
1.11.2 Die
#undef-Direktive
Inline-Funktionen oder Parameterisierte Makros 1.11.3 Die #include-Direktive 1.11.4 Die Direktiven #error und #pragma 1.11.5 Bedingte Kompilierung 2 Höhere und Fortgeschrittene Datentypen 2.1 Zeiger 2.1.1 Zeiger deklarieren 2.1.2 Adresse im Zeiger speichern 2.1.3 Zeiger dereferenzieren 2.1.4 Zeiger, die auf andere Zeiger verweisen 2.1.5 Dynamisch Speicherobjekte anlegen und zerstören - new und delete new - Dynamische
Objekte
anlegen
2.1.6 void-Zeiger
delete - Dynamische Objekte zerstören 2.1.7 Konstante Zeiger 2.2 Referenzen 2.3 Arrays 2.3.1 Arrays deklarieren 2.3.2 Arrays initialisieren 2.3.3 Bereichsüberschreitung von Arrays 2.3.4 Anzahl der Elemente eines Arrays ermitteln 2.3.5 Array-Wert von Tastatur einlesen 2.3.6 Mehrdimensionale Arrays 2.4 Zeichenketten (C-Strings) - char-Array 2.4.1 C-String deklarieren und initialisieren 2.4.2 C-String einlesen 2.4.3 C-Strings Bibliotheksfunktionen 2.5 Arrays und Zeiger 2.5.1 C-Strings und Zeiger 2.5.2 Mehrfache Indirektion 2.5.3 C-String-Tabellen 2.5.4 Arrays im Heap (Dynamisches Array) Zweidimensionale
dynamische Arrays
2.6
Parameterübergabe
mit Zeiger, Arrays und Referenzen
2.6.1 Call by value 2.6.2 Call by reference - Zeiger als Funktionsparameter 2.6.3 Call by reference mit Referenzen nachbilden 2.6.4 Arrays als Funktionsparameter 2.6.5 Mehrdimensionale Arrays an Funktionen übergeben 2.6.6 Argumente an die main-Funktion übergeben 2.7 Rückgabewerte von Zeiger, Arrays und Referenzen 2.7.1 Zeiger als Rückgabewert 2.7.2 Referenz als Rückgabewert 2.7.3 const-Zeiger als Rückgabewert 2.7.4 Array als Rückgabewert 2.7.5 Mehrere Rückgabewerte 2.8 Fortgeschrittene Typen 2.8.1 Strukturen Strukturen
deklarieren
2.8.2 Unions
Zugriff auf die Struktur-Mitglieder Parameterübergabe mit Strukturen an Funktionen Rückgabewert von Strukturen aus Funktionen Vergleichen von Strukturen Arrays von Strukturen Strukturen in Strukturen Exkurs: Verkettete Listen Verkettete Listen oder Arrays Die Daten (Der Knoten) Der Anfang der Liste (Der Anker) Das Ende der Liste Ein einfaches Beispiel Doppelt verkettete Listen Bitfelder (gepackte Strukturen) 2.8.3 Auzählungstypen 2.8.4 typedef 3 Gültigkeitsbereiche, spezielle Deklarationen und Typenumwandlungen 3.1 Gültigkeitsbereiche (Scope) 3.1.1 Lokaler Gültigkeitsbereich (Local Scope) 3.1.2 Gültigkeitsbereich Funktionen 3.1.3 Gültigkeitsbereich Namenraum (Namespaces) 3.1.4 Gültigkeitsbereich Klassen (Class Scope) 3.2 Namensräume (Namespaces) 3.2.1 Neuen Namensbereich erzeugen (Definition) 3.2.2 Zugriff auf die Bezeichner im Namensraum 3.2.3 using - Einzelne Bezeichner aus einem Namensraum importieren 3.2.4 using - Alle Bezeichner aus einem Namensraum importieren 3.2.5 Namensauflösung 3.2.6 Aliasnamen für Namensbereiche 3.2.7 Anonyme (namenlose) Namensbereiche 3.2.8 Namensbereich und Headerdateien 3.3 C-Funktionen bzw. Bibliotheken in einem C++-Programm 3.3.1 C-Funktionen aus einer C-Bibliothek aufrufen 3.4 Speicherklassenattribute 3.4.1 Speicherklasse auto 3.4.2 Speicherklasse register 3.4.3 Speicherklasse static 3.4.4 Speicherklasse extern 3.4.5 Speicherklasse mutable 3.5 Typenqualifikatoren 3.5.1 Qualifizierer const 3.5.2 Qualifizierer volatile 3.6 Funktionsattribute 3.7 Typenumwandlung 3.7.1 Standard-Typenumwandlung Integral- Promotion
3.7.2
Explizite
Typenumwandlung
Gleitkomma-Promotion Integral-Typenumwandlung Gleitkomma-Typenumwandlung Integral-Gleitkomma-Typenumwandlung Bool-Typenumwandlung Zeiger- und Basisklassen-Typenumwandlung Typenumwandlung mit
dem
C-Casts
Neue C++-Typenuwandlungs-Operatoren const_cast<TYP> - Typenuwandlung static_cast<TYP> - Typenumwandlung reinterpret_cast<TYP> - Typenumwandlung dynamic_cast<TYP> - Typenumwandlung 4 Objektorientierte Programmierung 4.1 OOP-Konzept versus prozedurales Konzept 4.1.1 OOP-Paradigmen 4.2 Klassen (fortgeschrittene Typen) 4.2.1 Klassen deklarieren 4.2.2 Elementfunktion (Klassenmethode) definieren 4.2.3 Objekte deklarieren 4.2.4 Kurze Zusammenfassung 4.2.5 private und public - Zugriffsrechte in der Klasse 4.2.6 Zugriff auf die Elemente (Member) einer Klasse Direkter Zugriff
mit dem
Punkteoperator
4.2.7 Ein Programm organisieren
Indirekter Zugriff mit dem Pfeiloperator 4.2.8 Konstruktoren Konstruktoren
deklarieren
4.2.9
Destruktoren
Konstruktoren definieren Konstruktoren aufrufen Standard-Konstruktor Destruktor
deklarieren
4.3 Mehr zu
den
Klassenmethoden (Klassenfunktionen)
Destruktor definieren Destruktor aufrufen (implizit) 4.3.1 Inline-Methoden (explizit und implizit) Inline implizit
4.3.2
Zugriffsmethoden
Inline explizit inline Konstruktoren und Destruktoren 4.3.3 Read-only-Methoden 4.3.4 this-Zeiger this-> und
*this
4.4
Verwenden
von Objekten
4.4.1 Read-only-Objekte 4.4.2 Objekte als Funktionsargumente call by value
4.4.3
Objekte
als Rückgabewert
call by refernce Referenzen auf Objekte Klassenmethoden mit Objekten als Argumente *this zum Zweiten ... 4.4.4 Klassen-Array (Array von Objekten) Deklarieren
4.4.5
Dynamische
Objekte
Initialisieren Zugriff auf Klassenelemente Objekt dynamisch
anlegen
4.4.6
Dynamische
Klassenelemente
Speicher freigeben Kein Speicherplatz mehr vorhanden Fehler-Handle von new 4.4.7 Objekte kopieren (Kopier-Konstruktor) 4.4.8 Dynamische erzeugte Objekte kopieren (operator=()) 4.4.9 Standard-Methoden (Überblick) 4.4.10 Objekt als Element (bzw. Eigenschaft) in anderen Klassen 4.4.11 Teilobjekte initialisieren 4.4.12 Klassen in Klassen verschachteln 4.4.13 Konstante Klasseneigenschaften (Datenelemente) 4.4.14 Statische Klasseneigenschaften (Datenelemente) 4.4.15 Statische Klassenmethoden 4.4.16 friend-Funktionen bzw. friend-Klassen 4.4.17 Zeiger auf Eigenschaften einer Klasse 4.5 Operatoren überladen 4.5.1 Grundlegendes zur Operator-Überladung Schlüsselwort
operator
4.5.2
Überladen
von arithmetischen Operatoren
Die Regeln Die Beispiele zu Demonstrationszwecken Operator-Überladung
als
Klassenmethode
4.5.3
Überladen
von unären Operatoren
Operator-Überladung als globale (friend-)Funktion Vergleich der Implementierungen der Operator-Überladung 4.5.4 Überladen von ++ und -- 4.5.5 Überladen des Zuweisungs-Operator Zuweisung von
Objekten
verhindern
4.5.6
Überladen
des Indexoperators [] (Arrays überladen)
4.5.7 Shift-Operatoren überladen 4.5.8 ()-Operator überladen 4.5.9 new- und delete-Operator überladen Überladen
von new
4.6
Typenumwandlung
für Klassen
Überladen von delete Überladen von new[] und delete[] Globale Überladung Klassenspezifische Überladung 4.6.1 Konvertierungskonstruktor 4.6.2 Konvertierungsfunktion 4.7 Vererbung (Abgeleitete Klassen) 4.7.1 Anwendungsbeispiel (Die Vorbereitung) 4.7.2 Die Ableitung einer Klasse public-Zugriffsrechte
für eine
abgeleitete Klasse
4.7.3
Redefinition
von Klassenelementen
Erbschaft und Erweiterung Zugriff auf die Elemente (der Basisklasse) 4.7.4 Konstruktoren Default-Konstruktor
4.7.5
Destruktoren
Basisinitialisierer Elementinitialisierer 4.7.6 Zugriffsrecht protected Vererbung (public,
private
und
protected)
4.7.7
Typenumwandlung
abgeleiteter Klassen
Explizite
Typenumwandlung
4.7.8
Klassenbibliotheken
erweitern
4.8 Polymorphismus 4.8.1 Statische bzw. dynamische Bindung 4.8.2 Virtuelle Methoden 4.8.3 Virtuelle Methoden redefinieren Signatur
4.8.4
Arbeitsweise
von virtuellen Methoden
Rückgabewert Zugriffsrechte Nachteile der
dynamischen
Bindung
4.8.5
Virtuelle
Destruktoren bzw. Destruktoren abgeleiteter Klassen
Virtuelle
Konstruktoren?
4.8.6
Polymorphismus
und der Zuweisungsoperator
4.8.7 Rein virtuelle Methoden und abstrakte Basisklassen Abstrakte Klassen
4.8.8
Probleme
mit der Vererbung und der dynamic_cast-Operator
Konstruktoren abstrakter Klassen Zuweisungsoperator und Kopierkonstruktor abstrakter Klassen 4.8.9 Fallbeispiel : Verkettete Listen Die einzelnen
Klassen
(Komponenten)
4.9
Mehrfachvererbung
Das komplette Listing Zusammengefasst 4.9.1 Indirekte Basisklassen erben 4.9.2 Virtuelle indirekte Basisklasse erben Reihenfolge bei der
Erzeugung der
Objekte
5 Templates und STL 5.1 Funktions-Templates 5.1.1 Funktions-Template definieren 5.1.2 Typenübereinstimmung 5.1.3 Funktions-Template über mehrere Module 5.1.4 Spezialisierung von Funktion-Templates 5.1.5 Verschiedene Parameter 5.1.6 Explizite Template-Argumente 5.2 Klassen-Templates 5.2.1 Definition 5.2.2 Methoden von Klassen-Templates definieren 5.2.3 Klassen-Template generieren (Instantiierung) 5.2.4 Weitere Template-Parameter 5.2.5 Standard-Argumente von Templates 5.2.6 Explizite Instantiierung 5.3 STL (Standard Template Library) 5.3.1 Konzept von STL Container
5.3.2
Hilfsmittel
(Hilfstrukturen)
Iteratoren Algorithmen pair
5.3.3
Allokator
pair-Basisdatentypen pair-Objekte Zugriff auf pair-Elemente pair als Rückgabewert von Funktionen Vergleichsoperatoren Funktionsobjekte Funktionsadapter not1, not2 bind1st, bind2nd ptr_fun 5.3.4 Iteratoren Zustände
von
Iteratoren
5.3.5
Container
Kategorien von Iteratoren Einfüge-Iteratoren Stream-Iterator Distanzen (Iterator-Funktionen) Datentypen
5.3.6
Algorithmen
Methoden Sequentielle Container Laufzeitklassen Worst case, Best case und Average case Die Container-Klasse vector Die Container-Klasse list Die Container-Klasse deque Abstrakte Container (Adapter-Klassen) Die Container-Klasse stack Die Container-Klasse queue Die Container-Klasse priority_queue Assoziative Container Die Container-Klasse set und multiset Die Container-Klasse map und multimap Weitere und zukünftige STL-Container-Klassen Algorithmen mit
Prädikat
5.3.7
Allokatoren
Nicht-verändernde Sequenz-Algorithmen Verändernde Sequenz-Algorithmen Algorithmen zum Sortieren Algorithmen für die binäre Suche Algorithmen zum Verschmelzen (Mischen) Mengenoperationen auf sortierten Strukturen Heap-Algorithmen Algorithmen für Minimum und Maximum Algorithmen zum lexikografischen Vergleich Permutation Der
Standard-Allokator
Speicher reservieren und freigeben Elemente konstruieren und zerstören Adressen ermitteln und max_size void-Allokator Vergleichsoperatoren Selbstdefinierten Allokator erstellen und verwenden Eine eigene Container-Klasse schreiben 6 Exception-Handling 6.1 Exception-Handling in C++ 6.2 Eine Exception auslösen 6.3 Eine Exception auffangen - Handle einrichten 6.3.1 Reihenfolge (Auflösung) der Ausnahmen 6.3.2 Alternatives catch(...) 6.3.3 Stack-Abwicklung (Stack-Unwinding) 6.3.4 try-Blöcke verschachteln 6.3.5 Exception weitergeben 6.4 Ausnahme-Klassen (Fehlerklassen) 6.4.1 Klassenspezifische Exceptions 6.5 Standard-Exceptions 6.5.1 Virtuelle Methode what() 6.5.2 Anwenden der Standard-Exceptions out_of_range
(logic_error)
6.6
System-Exceptions
invalid_argument (logic_error) length_error (logic_error) domain_error (logic_error) ios_base::failure (logic_error) overflow_error und underflow_error (runtime_error) range_error (runtime_error) 6.6.1 bad_alloc 6.6.2 bad_cast 6.6.3 bad_typeid 6.6.4 bad_exception 6.7 Exception-Spezifikation 6.7.1 Unerlaubte Exceptions 6.7.2 terminate-Handle einrichten 7 C++-Standard-Bibliothek 7.1 Die String-Bibliothek (string-Klasse) 7.1.1 Exception-Handling 7.1.2 Datentypen 7.1.3 Strings erzeugen (Konstruktoren) 7.1.4 Zuweisungen 7.1.5 Elementzugriff 7.1.6 Länge und Kapazität ermitteln bzw. ändern 7.1.7 Konvertieren in einen C-String 7.1.8 Manipulation von Strings 7.1.9 Suchen in Strings 7.1.10 Strings vergleichen 7.1.11 Die (überladenen) Operatoren 7.1.12 Einlesen einer ganzen Zeile 7.2 Ein-/Ausgabe Klassenhierarchie (I/O-Streams) 7.2.1 Klassen für Ein- und Ausgabe-Streams Die Klasse ostream
7.2.2
Klassen
für Datei-Streams (File-Streams)
Manipulatoren Eigene Manipulatoren Manipulatoren mit Parametern Eigene Manipulatoren mit Parametern Ausgabe in Felder Unformatierte Ausgabe Die Klasse istream Manipulatoren Unformatierte Eingabe Ein-/Ausgabe-Stream verbinden Status und Flags von Ein-/Ausgabe-Streams Status-Flags Format-Flags fstream
7.2.3
Klassen
für String-Streams
ifstream und ofstream Datenstrom Zeichenweise Ein-/Ausgabe Zeilenweise Ein-/Ausgabe Blockweise Ein-/Ausgabe Wahlfreier Dateizugriff Fehlerbehandlung good() Dateiende - eof() Fehler löschen fail() und bad() Exceptions Auf den
Stream-Puffer
zugreifen
7.2.4 Die Klasse
streambuf
Puffer anlegen und
Positionieren
7.2.5 Die Klasse
filebuf
Zeichen lesen Zeichen zurückstellen und schreiben 7.2.6 Die Klasse stringbuf 7.2.7 Die Klasse stdiobuf 7.3 Numerische Bibliothek(en) 7.3.1 Komplexe Zahlen (complex-Klasse) 7.3.2 valarray Konstruktoren
7.3.3
Globale
numerische Funktionen (cmath und cstdlib)
Methoden Operatoren Mathematische Funktionen Arbeiten mit Teilvektoren Die Klasse slice Die Klasse gslice Die Klasse mask_array Die Klasse indirect_array <cmath>
7.3.4
Grenzwerte
von Zahlentypen
<cmath> - C99-Standard <cstdlib> - Mathematische Funktionen <climits>
und <cfloat> (alias
<limits.h> und <float.h>)
7.3.5
Halbnumerische
Algorithmen
7.4 Typenerkennung zur Laufzeit 8 Weiteres zum C++-Guru 8.1 Module 8.1.1 Aufteilung 8.1.2 Die öffentliche Schnittstelle (Headerdatei) 8.1.3 Die private Datei 8.1.4 Die Client-Datei 8.1.5 Speicherklassen extern und static 8.1.6 Werkzeuge 8.2 Von C zu C++ 8.2.1 Notizen 8.2.2 Kein C++ 8.2.3 Kein C 8.2.4 malloc und free oder new und delete 8.2.5 setjmp und longjmp oder catch und throw 8.3 "Altes" C++ 8.3.1 Headerdateien mit und ohne Endung 8.3.2 Standardbibliothek nicht komplett oder veraltet 8.3.3 Namespace (Namensbereiche) 8.3.4 Schleifenvariable von for 8.4 UML 8.4.1 Wozu UML? 8.4.2 UML-Komponenten 8.4.3 Diagramme erstellen 8.4.4 Klassendiagramme mit UML Die Klasse
8.5
Programmierstil
Die Attribute (Eigenschaften) einer Klasse Das Objekt einer Klasse Die Operationen (Methoden) einer Klasse Sichtbarkeit Klassenattribut Einiges zur Visualisierung von Klassen in der Praxis Notizen Vererbung Mehrfachvererbung Abstrakte Klassen Assoziationen Kardinalität Spezielle Assoziationen Aggregationen Komposita - Eine strenge Aggregation Kontexte Pakete Schnittstellen Abhängigkeiten Die Praxis Gespräch analysieren Klassendiagramm entwickeln Klassen gruppieren Assoziation bilden Aggregationen und Komposita Klassen erstellen Zusammenfassung 8.5.1 Kommentare 8.5.2 Code 8.5.3 Benennung 8.5.4 Code-Formatierung 8.5.5 Zusammenfassung 8.6 Boost 8.6.1 Boost.Regex (Reguläre Ausdrücke) Reguläre
Ausdrücke (Eine kurze
Einführung)
Elemente für Reguläre Ausdrücke (POSIX-RE) Zeichenliterale Beliebiges Zeichen Zeichenauswahl Vordefinierte Zeichenklassen Quantifizierer Gruppierung Alternativen Sonderzeichen Konstruktor von Boost.Regex Verwendung von Boost.Regex Suchen Ersetzen mit Boost.Regex Zusammenfassung von Boost.Regex 9 Netzwerkprogrammierung und Cross-Plattform-Entwicklung in C++ 9.1 Begriffe zur Netzwerktechnik 9.1.1 IP-Nummern Statische und
dynamische
IP-Nummer
9.1.2
Portnummer
IPv4- und IPv6-Nummern 9.1.3 Host- und Domainname 9.1.4 Nameserver 9.1.5 Das IP-Protokoll 9.1.6 TCP und UDP 9.1.7 Was sind Sockets? 9.2 Headerdateien zur Socketprogrammierung 9.2.1 Linux/UNIX 9.2.2 Windows Bibliotheken
9.3
Client-/Server-Prinzip
Die Windows-Programmierung und die (C)Syntax Winsock initialisieren 9.3.1 Loopback-Interface 9.4 Erstellen einer Client-Anwendung 9.4.1 socket() - Erzeugen eines Kommunikationsendpunkt 9.4.2 connect() - Client stellt Verbindung zum Server her Ausfüllen
von
sockaddr_in
9.4.3 Senden und
Empfangen von Daten
send() und recv() -
TCP
9.4.4 close(),
closesocket()
sendto() und recvfrom() - UDP 9.5 Erstellen einer Server-Anwendung 9.5.1 bind() - Festelegen einer Adresse aus dem Namensraum 9.5.2 listen() - Warteschlange für eingehende Verbindungen einrichten 9.5.3 accept() und die Serverhauptschleife 9.6 Cross-Plattform-Development 9.6.1 Abstraktion Layer 9.6.2 Headerdatei (socket.h) socket.h
für
MS-Windows
9.6.3
Quelldatei (socket.cpp)
socket.h für Linux/Unix socket.cpp
für
MS-Windows
9.6.4 TCP-Echo-Server
(Beispiel)
socket.cpp für Linux/Unix TCP-Echo-Server
(echo_server.cpp)
9.6.5
Exception-Handling
integrieren
TCP-Echo-Client (echo_client.cpp) TCP-Echo-Server - Beispiel ausführen 9.6.6 Server- und Client-Sockets erstellen (TCP) serversock.h
(Server-Socket-Klasse)
9.6.7 Ein UDP-Beispiel
serversock.cpp (Server-Socket-Klasse) clientsock.h (Client-Socket-Klasse) clientsock.cpp (Client-Socket-Klasse) All together - Die Hauptprogramme (Server/Client) echo_server2.cpp echo_client2.cpp Beispiel ausführen Einfaches Clientbeispiel - Eine komplette Webseite abholen UDP-Server -
udp_echo_server.cpp
9.7
Mehrere
Clients gleichzeitig behandeln
UDP-Client - udp_echo_client.cpp Beispiel ausführen select() - Eine
portablere
Altervative
9.8
Weitere
Anmerkungen zur Netzwerkprogrammierung
Der Server - multi_server.cpp Der Client - multi_client.cpp Das Beispiel ausführen 9.8.1 Das Datenformat 9.8.2 Der Puffer 9.8.3 Portabilität 9.8.4 Von IPv4 nach IPv6 Konstanten
9.8.5 RFC-Dokumente (Request
for Comments)
Strukturen Funktionen 9.8.6 Sicherheit 9.8.7 Fertige Bibliotheken 10 GUI und Multimediaprogrammierung in C++ 10.1 GUI-Programmierung - Überblick 10.1.1 Low-Level 10.1.2 High-Level RAD-Tools
10.1.3
Überblick
zu plattformunabhängigen Bibliotheken
10.1.4 Überblick zu plattformabhängigen Bibliotheken 10.2 Multimedia- und Grafikprogrammierung - Überblick 10.2.1 Überblick zu plattformunabhängigen Bibliotheken 10.2.2 Überblick zu plattformabhängigen Bibliotheken 10.3 GUI-Programmierung mit wxWidgets 10.3.1 Warum wxWidgets? 10.3.2 Das erste Programm - Hallo Welt 10.3.3 Die grundlegende Struktur eines wxWidgets-Programm Elemente zum Frame
hinzufügen
10.3.4 Event-Handle
(Ereignisse behandeln)
Ereignisse behandeln Ein Event
überspringen
10.3.5 Die
Fenstergrundlagen
Dynamischer Event-Handle Weiteres zu den Event-Handlern Top-Level-Fenster
10.3.6
Übersicht
zu den wxWidgets-(Fenster-)Klassen
Koordinaten-System Fenster erzeugen und zerstören 10.3.7 wxWindow, wxControl und wxControlWithItems - Die Basisklassen wxControl und
wxControlWithItems
10.3.8 Top-Level-Fenster
wxFrame
10.3.9
Container Fenster
wxMDIParentFrame und wxMDIChildFrame wxDialog (mit wxMessageDialog) Layout mit wxSizer wxBoxSizer wxGridSizer wxFlexGridSizer, wxStaticBoxSizer und wxNotebookSizer wxPopupWindow wxPanel und
wxNotebook
10.3.10
Nicht-statische
Kontroll-Elemente
wxPanel wxNotebook Alternativen zu wxNotebook wxScrolledWindow wxSplitterWindow wxButton
10.3.11
Statische
Kontroll-Elemente
wxBitmapButton wxChoice wxComboBox wxCheckBox wxListBox und wxCheckListBox wxRadioBox und wxRadioButton wxSpinCtrl und wxSlider wxTextCtrl wxToggleButton wxGauge
10.3.12
Menüs
wxStaticText wxStaticBitmap wxStaticLine wxStaticBox wxMenu
10.3.13
Ein
Beispiel - Text-Editor
Kontroll-Balken wxMenuBar wxToolBar PopupMenu 10.3.14 Standard-Dialoge Dialoge zur Anzeige
von
Informationen
10.3.15
Weitere
Elemente und Techniken im Überblick
wxProgressDialog wxBusyInfo wxShowTip All together (Ein Beispiel) Dialoge für Dateien und Verzeichnisse wxFileDialog wxDirDialog Dialoge zum Auswählen wxColourDialog wxFontDialog wxSingleChoiceDialog wxMultiChoiceDialog Dialoge für die Anwender-Eingabe wxNumberEntryDialog wxTextEntryDialog Weitere Dialoge Tastatur- und
Maus-Eingabe
Device Context (Geräte-Kontext) Mit Bildern arbeiten wxBitmap wxIcon wxCursor wxImage Zwischenablage und Drag & Drop Fortgeschrittene Fensterklassen Daten-Strukturen Strings (wxString) Arrays (wxArray) Verkettete Listen (wxList) wxHashMap Datum und Uhrzeit Hilfsklassen für Datenstrukturen Datei-, Verzeichnis-Klassen Stream-Klassen Multithreading Sockets (wxSocket) MFC versus wxWidgets Ausblick Anhang Operatoren in C++ und deren Bedeutung (Übersicht) Vorrangtabelle der Operatoren Schlüsselwörter von C++ Informationsspeicherung Zahlensysteme Dezimalsystem Dualsystem (Binärsystem) Oktalsystem Hexadezimalsystem Zahlensysteme umrechnen Dezimal nach Dual Dual nach Dezimal Dezimal nach Hexadezimal Hexadezimal nach Dezimal Oktal nach Dual Hexadezimal nach Dual Bytes und Maschinenwörter Zeichensätze ASCII-Zeichensatz ASCII-Erweiterungen Unicode |
