Seminar: "Einführung in C/C++"
Einführung in die Programmiersprache C/C++
“Montag”
Andreas Dö[email protected]
SS 2004
Seminar: "Einführung in C/C++" 2
Organisation Homepage: www.inf.fu-berlin.de/inst/agbio Vormittags: 10.00-12.00 Uhr Seminar
Mo: Raum 031 (Arnimallee 2-6)Di: Raum 005 (Takustr. 9)Mi: Raum 055 (Takustr.9)Do: Raum 005 (Takustr.9)
Nachmittags: Übungen am RechnerRaum 017 (Arnimallee 2-6)
Es gibt keine benoteten Scheine Fortsetzung der Veranstaltung:
“Hardcore C++” jeweils Freitag 10-12
Seminar: "Einführung in C/C++" 3
Warum sind wir hier?Warum überhaupt C/C++? C++ ist schnell. C++ ist weit verbreitet. C++ verfügt über viele Sprachkonstrukte. C++ erlaubt „maschinennahes“
Programmieren.
Ziel des Kurses Die wichtigsten Sprachelemente lernen. Einfache Programme in C++ schreiben.
Eventuell werden gewisse grundlegende Programmierkenntnisse vorausgesetzt.
Seminar: "Einführung in C/C++" 4
ÜberblickMo.: “Grundlagen”
Compiler-Workflow, Deklarationen, Operatoren, Anweisungen, Funktionen, ...
Di.: “Pointermagie”Zeiger, Referenzen, Felder, Speicherverwaltung
Mi.: “Klassen”Klassendefinition, Member, Vererbung
Do.: “Mehr Klassen”Operatoren, Polymorphie, Standardbibliotheken
Seminar: "Einführung in C/C++" 5
Die Geschichte von C/C++Was man wissen muss: C/C++ hat eine Geschichte! C++ ist aus C entstanden und (weitgehend)
abwärts-kompatibel. Es gibt inzwischen einen Standard. Es gibt noch keinen Compiler, der den
Standard vollständig erfüllt (aber alle entwickeln sich in diese Richtung)
Seminar: "Einführung in C/C++" 7
“Hallo Berlin!”Ein einfaches C++-Programm:
Speichern als test.cpp ab und compiliere mit:g++ test.cpp –o test
Dann Programm ausführen mit: ./test
#include <iostream>
int main(){
std::cout << "Hallo Berlin!";
return 0;}
Seminar: "Einführung in C/C++" 8
Der Workflow Input: .cpp und .h
Dateien. Für jede .cpp Datei:
– Preprocessor: Headerdateien (.h) einfügen.
– Compiler: Erzeugt .obj Dateien.
Linker: – Erzeugt .exe Programm
aus allen .obj Dateien. – Nimmt Stücke aus
verwendeten Libraries.
Output: .exe Datei
Seminar: "Einführung in C/C++" 9
Der Preprocessor Befehle für den Preprocessor beginnen mit #. #include fügt eine Datei in den Quelltext ein.
(z.B. eine Headerdatei)
#define definiert ein Macro: Das Schlüsselwort wird im ganzen Programm durch den angegebenen Text ersetzt.
#include <iostream>
#define PI 3.141596
Seminar: "Einführung in C/C++" 10
Ein C/C++-Programm ist ein Text Quelltext ist case-sensitiv. Preprocessor: Befehle enden mit Zeilenumbruch.
Compiler: Zeilenumbruch ist whitespace. Ausnahme: Kommentarezeilen beginnen mit // und
enden mit dem nächsten Zeilenumbruch.Bsp: return 0; //gib eine 0 zurueck
Anweisungen enden mit einem ; -Zeichen.Kein ; steht jedoch...... hinter Preprocessor-Befehlen... hinter } -Zeichen (außer bei Klassen und Enums)
Seminar: "Einführung in C/C++" 11
Deklarationen & DefinitionenDeklaration von X =
Beschreibung, was X ist
Definition von X = Deklaration von X
+ Erzeugung von X
Anmerkung: Ein X darf beliebig oft deklariert, aber nur einmal definiert werden.
Seminar: "Einführung in C/C++" 12
VariablenVariablen definieren:
int j;
float x, y;
Optional sind auch Initialisierungen möglich:int i = 32;
float z = 2.781;
char c = 'x';
Deklaration von Variablen mit extern:extern int i;
Seminar: "Einführung in C/C++" 13
Gültigkeit von DeklarationenRegel 1:
»Ein Symbol ist im Programmtext nurunterhalb seiner Deklaration bekannt.«
Regel 2: »Eine Deklaration, die innerhalb eines{ } -Blockes steht, gilt auch nur lokal innerhalb dieses Blockes.«
Seminar: "Einführung in C/C++" 14
“Eingebaute” TypenJede Variable kann nur Werte eines
bestimmten Typs speichern.
char: Zahlen von 0 bis 255signed char: Zahlen von -128 bis 127short int: Zahlen von -32768 bis 32767unsigned short int: Zahlen von 0 bis 65535int: Zahlen von -231 bis 231-1unsigned int: Zahlen von 0 bis 232-1bool: 0 oder 1
Seminar: "Einführung in C/C++" 15
weitere “eingebaute” TypenTypen zur Speicherung von Kommazahlen:
float: Fließkommazahl mit einfacher
Genauigkeitdouble: Fließkommazahl mit
doppelter Genauigkeit
Seminar: "Einführung in C/C++" 16
... und was ist mit Buchstaben?Buchstaben sind ganze Zahlen:
'A' == 65 einfache Anführungszeichenfür einzelne Zeichen:ASCII-Code
Auch Wahrheitswerte sind Zahlen:true == 1 (und alle anderen Zahlen 0)false == 0
(Zeichenketten sind allerdings komplizierter...)
Seminar: "Einführung in C/C++" 17
Felder (arrays)Felder = Mehrere Variablen, die im Speicher direkt
hintereinander liegen.
int X[20]; Ein Feld von 20 int-Variablen
int X[3]={2,3,5}; Auch Felder kann maninitialisieren.
int X[]={1,2,3,4}; Bei initialisierten Feldern kann man sichdie Dimension sparen.
Seminar: "Einführung in C/C++" 18
Strings sind FelderIn C sind Stings einfach Arrays von char:
char X[] = "hallo";
ist das gleiche wie
char X[] = {104, 97, 108, 108, 111, 0};
Man beachte die Null am Ende!
Seminar: "Einführung in C/C++" 19
Zeiger (pointers)Zeiger sind Variablen, deren Inhalt auf andere
Variablen verweist.
int * X; Zeiger auf eine int Variablefloat * Y; Zeiger auf eine flaot Variable
Seminar: "Einführung in C/C++" 20
kleine LesehilfeFaustregel:
Bsp:char * X1 [3]; array von pointernchar (* X2) [3]; pointer auf arrayint X3 [10][3]; array von arraysint * const X4; const pointer
auf intint const * X5; pointer auf
const int
»Variablendefinitionen liest man von innen nach
außen.«
Seminar: "Einführung in C/C++" 21
CastsEinige Typen werden von C/C++ automatisch
als ein anderer Typ interpretiert.Bsp:short s = 30000;
int i = s; Kein Problem.char c = s; Fehler! Passt nicht!
Ein Cast erzwingt eine Uminterpretation:
char c = (char) s; Geht jetzt: c enthält nun 30000 modulo
256
Seminar: "Einführung in C/C++" 22
ZuweisungenVariablen kann man Werte zuweisen:
1. Durch die Initialisierung2. Durch eine Zuweisung
Bsp:int x = 12; // initialisiert x auf 12x = 13; // setzt den Wert auf 13int y = x + 1; // initialisiert y auf 14
Allgemein:L-VALUE = R-VALUE;
Seminar: "Einführung in C/C++" 23
OperatorenEs gibt in C/C++ die üblichen Operatoren.
Besonderheiten:– Test auf Gleichheit ist == (und nicht etwa =)– Test auf Ungleichheit ist !=– & und | stehen für bitweise UND bzw. ODER,
&& und || logisches UND bzw. ODER sind– ~ steht für bitweises NOT,
! steht für logisches NOT
Seminar: "Einführung in C/C++" 24
...noch mehr OperatorenIncrement und Decrement:
++X; X = X + 1;--X; X = X - 1;
Zuweisungsoperatoren: z.B:
X += 20; X = X + 20;X -= 12; X = X - 12;X *= Y; X = X * Y;X /= 2; X = X / 12;X <<= 1; X = X << 1;...
Seminar: "Einführung in C/C++" 25
AnweisungenEs gibt (unter anderem) folgende
Anweisungen:
if und else while und do for switch-case
Seminar: "Einführung in C/C++" 26
if und else
if (TEST){IFBLOCK
}else{ELSEBLOCK
}
Seminar: "Einführung in C/C++" 27
while
while (TEST)
{
BLOCK
}
Seminar: "Einführung in C/C++" 28
do-while
do
{
BLOCK
} while (TEST);
Seminar: "Einführung in C/C++" 29
for
for (INIT;TEST;STEP)
{
BLOCK
}
Seminar: "Einführung in C/C++" 30
switch-case
switch (X)
{
case 1: case 2:
//Code für X==1 und X==2
break;
case 3:
//Code für X==3
break;
default:
//Code für alle anderen Werte von X
}
Seminar: "Einführung in C/C++" 31
Quiz: Was gibt diese Programm aus?
int i = 14;
for (i = 0; i < 10; ++i);
{
std::cout << i;
}
Seminar: "Einführung in C/C++" 32
FunktionenDefinition:
Deklaration:
int max (int x, int y)
{
if (x > y)
{
return x;
}
return y;
}
int max (int x, int y);
Seminar: "Einführung in C/C++" 33
...nochmal FunktionenFunktionen ohne Rückgabewert:
Funktionsaufruf:
Argumente werden by value übergeben.
void print (int x)
{
std::cout << x;
}
int y = max(1, 2);
print (y);