Informatik - C - C kurs.pdf

(589 KB) Pobierz
Programmieren in C/C++
Programmieren in C/C++
von Michael Weitzel
Ein Kurs fur Anfanger
Ausgabe vom 30. September 2001
262971364.001.png
Michael Weitzel / LDKnet e.V. - Programmieren in C/C++
1
Inhaltsverzeichnis
1 Vorwort
3
1.1 Hinweis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2 Die Grundlagen: C 5
2.1 Das erste C - Programm Schritt fur Schritt . . . . . . . . . . . . . . . . . 5
2.2 Variablen und einfache Typen . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Strukturen (structs) . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Varianten (unions) . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.3 Aufzahlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Eindimensionale Felder . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Mehrdimensionale Felder . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Bedingungsabfragen mit if . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Abfragen mit switch & case . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.1 Logische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.2 Bitweise logische Operatoren . . . . . . . . . . . . . . . . . . . . . 15
2.6.3 Abkurzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.4 Ein Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7.1 Die for - Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7.2 Die while - Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7.3 Die do...while - Schleife . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7.4 break und continue . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.7.5 Ein Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.7.6 Das goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.8.1 Ein Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.9 Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.9.1 Pointer auf Funktionen . . . . . . . . . . . . . . . . . . . . . . . . 25
2.10 Typenkonvertierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.11 Modulare Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.12 Gultigkeitsbereiche von Variablen . . . . . . . . . . . . . . . . . . . . . . 28
2.12.1 Lokale Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.12.2 Globale Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.12.3 static bei Funktionen und globalen Variablen . . . . . . . . . . . . 30
2.13 Eigene Typen denieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.14 Makros und Praprozessordirektiven . . . . . . . . . . . . . . . . . . . . . 31
2.15 Dynamische Speicherverwaltung . . . . . . . . . . . . . . . . . . . . . . . 32
2.15.1 Wie funktioniert dynamische Speicherverwaltung in C? . . . . . . 33
Michael Weitzel / LDKnet e.V. - Programmieren in C/C++
2
3 Eine Generation weiter: C++ 35
3.1 Die Grundideen der Objektorientierung . . . . . . . . . . . . . . . . . . . 35
3.1.1 Objekte und Klassen . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.2 Vererbungshierarchien . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2 Objektorientierung und C++ . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2.1 Klassen in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2.2 Der Copy-Constructor . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.3 Der Default-Constructor . . . . . . . . . . . . . . . . . . . . . . . 41
3.2.4 Vererbung in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.2.5 Abstrakte Klassen und virtuelle Vererbung . . . . . . . . . . . . . 44
3.2.6 Polymorphie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.7 Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2.8 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2.9 Statische Attribute und Methoden . . . . . . . . . . . . . . . . . 53
3.2.10 Konstante Methoden . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2.11 Ausnahmebehandlung . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3 Andere Erweiterungen von C++ . . . . . . . . . . . . . . . . . . . . . . . 57
3.3.1 Dynamische Speicherverwaltung . . . . . . . . . . . . . . . . . . . 57
3.3.2 default-Werte fur Funktionsparameter . . . . . . . . . . . . . . . 58
3.3.3 Uberladen von Funktionen und Methoden . . . . . . . . . . . . . 59
3.3.4 Uberladen von Operatoren . . . . . . . . . . . . . . . . . . . . . . 59
3.3.5 Call By Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.4 Generische Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.4.1 Template-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.4.2 Template-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.5 Die Standardbibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
A Zahlensysteme 64
A.1 Dezimalsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A.1.1 Umrechnung in andere Zahlensysteme . . . . . . . . . . . . . . . . 64
A.2 Hexadezimalsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A.3 Oktalsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
A.4 Dualsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
A.4.1 Umrechnung ins Oktalsystem . . . . . . . . . . . . . . . . . . . . 65
A.4.2 Umrechung ins Hexadezimalsystem . . . . . . . . . . . . . . . . . 65
B Bedienung des Compilers
65
B.1
Ubersetzung eines Quelltextmoduls . . . . . . . . . . . . . . . . . . . . . 66
C ASCII-Tabelle
68
Michael Weitzel / LDKnet e.V. - Programmieren in C/C++
3
1 Vorwort
C++ ist DIE Standard-Programmiersprache. C++ bildet die Obermenge von C, Java,
PHP, Perl und anderen Programmier- und Scriptsprachen. D.h., wenn man in C++ pro-
grammieren kann, ist es ein Katzensprung zu Java, zu dynamischen Internet-Seiten mit
PHP und zu Perl, eine der beliebtesten und machtigsten Script-Sprachen.
Je empfehle den Einsatz der GNU-Entwicklungsumgebung unter Unix/Linux bzw. die
hervorragenden Windows32-Versionen wie DJGPP oder CygWin. Der groe Vorteil die-
ser Entwicklungsumgebung ist zunachst die Tatsache, da es sich um freie Programme
handelt, die niemand von uns bezahlen braucht. Davon abgesehen ist der von uns ver-
wendete C++ - Compiler einer der besten, der uberhaupt erhaltlich ist.
Dieser C/C++ - Kurs richtet sich an Anfanger, die moglicherweise noch nichts mit dem
Thema Programmieren zu tun hatten. Dieses Skript ist das Begleitmaterial zu einem
Abendkurs, den ich im Vereinsraum des LDKnet e.V. gehalten habe. Den Vereinsraum
muten wir aus nanziellen Grunden abgeben, weswegen sich das mit dem Kurs leider
auch erledigt hatte. Ich will in Zukunft versuchen, noch ausstehende Punkte zu schreiben
und Teile zu verbessern. Falls ein Sachverhalt zu knapp oder unverstandlich dargestellt
ist, bitte ich um Ruckmeldung. Fur Verbesserungen und Korrekturen bin ich dankbar.
Da ich selbst schon etwas langer mit dem Thema zu tun habe, fehlt mir moglicherweise
manchmal der richtige Blick fur Probleme. Da ich kein Buch schreiben will (gute Bucher
gibt's genug ;-), kann ich naturlich nicht auf die Details der C-Befehlsbibliothek oder des
C++ STL eingehen - das wurde den Rahmen sprengen. Man kann viel lernen, indem
man sich einfach fertige Quellcodes anschaut. Linux-Benutzer, die eine Dokumentation
zu einem Befehl der Befehlsbibliothek suchen, sollten einen Blick in die man-Pages wer-
fen. Die Windows-Leute nden eine ahnliche Dokumentation vor (einfach im RHIDE mit
dem Cursor mal auf den unbekannten Befehl gehen und Strg-F1 drucken). Der Nachteil
hierbei ist, da es diese Hilfe nicht in deutsch gibt. Wer kein Englisch kann, sollte sich
vielleicht spater ein Buch zulegen.
Bei manchen Themen, besonders bei den
" Pointern\, erwarte ich Verstandnisprobleme.
Das Programmieren eines Computers hat nicht allzuviel mit der " naturlichen Welt\ zu
tun. Als Anfanger braucht man eine gewisse Zeit, um sich die neue Denkweise anzueignen.
Auch, wenn man moglicherweise durch diesen Kurs nicht zum Pro wird, wird man auf
jeden Fall etwas Wichtiges mitnehmen: Einen erweiterten Horizont.
Viel Spa!
1.1 Hinweis
Ich, Michael Weitzel, behalte mir alle Rechte bezuglich dieses Dokumentes vor. Dieses
Dokument, oder Auszuge aus diesem Dokument, durfen nicht ohne meine Zustimmung
Michael Weitzel / LDKnet e.V. - Programmieren in C/C++
4
verbreitet, ubersetzt oder vervielfaltigt werden. Die gewerbliche Nutzung ist untersagt.
c 2000 Michael Weitzel hweitzel@ldknet.orgi
Zgłoś jeśli naruszono regulamin