Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen Gültigkeitsbereich Operatoren Arrays Funktionen Steuerelemente Seite 2 Seite 1
Übersetzung So entsteht ein ausführbares Programm: Programm *.cc Preprozessor Compiler Objekt- Code *.o Linker Header- Datei *.h Ausführbares Programm Bibliotheken g++ -o program program.cc Seite 3 Formale Syntaxüberprüfung Jeder Befehl endet mit ; Groß-/Kleinschreibung ist relevant Blöcke werden mit geschwungenen Klammern gekennzeichnet {...} Kommentare: zwischen /* und */ oder in einer Zeile mit // am Anfang Preprozessor-Anweisungen beginnen mit # (z.bsp.: #include <iostream>) Seite 4 Seite 2
Ausgabe/Eingabe Ausgabe cout << Hello World << endl; cout << Wert: << variable << endl; Eingabe cin >> variable; benötigt: #include <iostream> Seite 5 Funktion main() Diese Funktion wird beim Start eines Programms aufgerufen. #include <iostream> int main() { cout << Hello World! << endl; } Seite 6 Seite 3
Variablen I - Grundtypen char short int long float double long double Character-Zeichen ganze Zahl ganze Zahl ganze Zahl Gleitkommazahl Gleitkommazahl Gleitkommazahl Seite 7 Variablen II - Deklaration Deklaration: Bei der Deklaration einer Variable wird diese dem Programm bekanntgegeben und fallweise gleich intialisiert. Beispiele: int a; int b=5; char answertoquestion='y'; float min=max=3; int fi=max; int iseven=(max/2==0); Seite 8 Seite 4
Variablen III - Typumwandlung Automatisch (Promotion) -> float oder double -> int Problem: gemischtes Rechnen Explizit (Cast) cout << (char) 65; //oder char(65) // gibt das Zeichen A aus Seite 9 Gültigkeitsbereich Variablen/Instanzen sind nur in dem Bereich gültig, in dem sie deklariert wurden. Scope: Global/File-Scope: Sichtbar vom Punkt der Deklaration bis zum Ende der Datei. Function-Scope: Sichtbar innerhalb der Funktion. Local-Scope: Nur sichtbar im Block ({... }), in dem die Deklaration ist. Class-Scope: Nur sichtbar für Member-Funktionen. Seite 10 Seite 5
Operatoren Zuweisung: a=b; Arithmetische Operatoren (+, -, *, /, %) c=a+b; Vergleichsoperatoren (==,!=, >, <, >=, <=) if (a==b) { cout << OK << endl; } Logische Operatoren (&&, ) if (a==1 && b!=12) { cout << OK << endl; } Abkürzungen a++; // a um 1 erhöhen a += b; // b zu a addieren Seite 11 Arrays I Felder von mehreren Variablen eines Typs: Setzkasten Elemente eines Arrays werden durch einen Index angesprochen. Der Index startet mit 0!!! Bsp: int lotto[6] = {10, 7,9,17, 28, 36} Index [0] [1] [2] [3] [4] [5] 10 7 9 17 28 36 Seite 12 Seite 6
Arrays II Index [0] [1] [2] [3] [4] [5] 10 7 9 17 28 36 Deklaration: int a[6]={10,7,9,18,28,36}; int lotto[6]; // 6 Elemente 0..5 int prim[15]={20}; //+Initialisierung, der Rest wird mit 0 initialisiert Verwendung: int a=lotto[3]; lotto[2]=lotto[4]; for (int i=0; i<6; i++){ lotto[i]=9; } Achtung Grenzen von Arrays werden nicht geprüft!!! Seite 13 Funktionen I Eine Funktion erledigt einen genau definierten Teil des Gesamtproblems. Die gleiche Funktion kann im Programm öfters verwendet werden. Deklaration: Wie sieht die Funktion aus (Argumente + Rückgabewert)? Definition: Programmcode der Funktion. Aufruf: Verwendung der Funktion Seite 14 Seite 7
Funktion II - Deklaration/Definition Deklaration (Prototyp): int maximal(int a, int b); Definition: int maximal(int a, int b) { int ergebnis; if (a>b){ ergebnis=a; } else { ergebnis=b; } return(ergebnis); // Rückgabe } Seite 15 Funktion III - Aufruf Aufruf: main() { int e; e=maximal(3,10); } Seite 16 Seite 8
Funktion IV - Überladen int maximal(int a, int b); int maximal(int a, int b, int c); float maximal(float a, float b); Compiler sucht sich die passende Funktion anhand der Function Signature (=Typ und Anzahl der Argumente) int r = maximal(12, 14); float t = maximal(28.5, 3.0); int s = maximal(28.5, 3); // Verwendet Konversion 2x Seite 17 Funktion V - Standardwerte int maximal(int a, int b=0, int c=0); Deklariert: int maximal(int); int maximal(int, int); int maximal(int, int, int); Standardwerte müssen von rechts beginnen!!! Seite 18 Seite 9
Funktion V - Argumente Pass by Value void print(string a_string); Argument muß kopierbar sein! Pass by Reference void print(string& a_string); Argument wird als Objekt übergeben Seite 19 Steuerelemente I Sequenz: Eine Anweisung folgt der anderen. cout << myvar << endl; i++; Verzweigung (Branch): Anhand einer Bedingung kann die Ausführung in 2 verschiedene Wege verzweigt werden. if(<bedingung>) { TRUE-Bl. } else { FALSE-Bl. } Schleife (Loop): Eine oder mehrere Anweisungen können anhand einer Bedingung mehrmals ausgeführt werden. while(<bedingung>) { Statements } Seite 20 Seite 10
Steuerelemente II - Schleifen Beispiel while: x=0; while (x < 100) { } x++; Beispiel for: for(x=0; x<100; x++) { cout << Run number: << x << endl; } Seite 21 Beispiel: Countdown Das Programm soll folgenden Output liefern: 10 9 8 7 6 5 4 3 Ignition 2 1 Liftoff 1. Erstellen Sie das Programm als Funktion: int main() {... }; 2. Erstellen Sie das Programm mit einer eigenen Funktion für die Ausgabe: int main() {... }; //Schleife,ruft print auf void print(int) {... }; // macht die Ausgabe Seite 22 Seite 11