Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Bella Ziegler Geändert vor über 7 Jahren
1
Operatoren, Kontrollstrukturen und Funktionen
2
Logische Operatoren zum Vergleich zweier Ausdrücke ==, !=,, = Ergebnis ist vom Typ bool Achtung! Große Verwechslungsgefahr von Vergleicher '==' mit Zuweiser '=' bool lvalue = expr expr
3
Logische Operatoren logisches AND (binär): && logisches OR (binär): || logisches NOT (unär): ! Ergebnis vom Typ bool result = ((true && false) || !true)
4
Bitweise Operatoren AND &, OR |, XOR ^, NOT ! Bit shift left ( >) lvalue = expr dasDoppelte = wert << 1 0100111078 ^0010011139 =01101001105 <<0010110145 =0101101090
5
Zuweisungen Zuweisungsoperator = Zuweisungskurzformen *=, /=, %=, +=, -=, >=, &=, |=, ^= binäre Operatoren einem der Operanden soll Ergebnis zugewiesen werden var1 = var1 + var2 wird zu var1 += var2 lvalue expr
6
Typecasts explizite Umwandlung bei Variablen unterschiedlichen Typs der Compiler kann nicht immer entscheiden nur verwenden, wenn unbedingt nötig Casts ohne Überprüfung reinterpret_cast Bitmuster wird einfach uminterpretiert möglichst nicht verwenden!
7
Typecasts Überprüfung zur compile-time static_cast Probleme, wenn Wertebereich nicht ausreicht Typinformation muss zur compile-time vorliegen lvalue = static_cast (expr) Überprüfung zur run-time dynamic_cast nur für Objekte, nicht primitive Datentypen lvalue = dynamic_cast (expr)
8
Kontrollstrukturen: if … else if (condition) statement else statement if (a < b) cout << "a bigger than b"; else cout << "b bigger or equal a"; geschweifte Klammern, falls mehr als ein Statement Erweiterungen möglich: if () … else if () … else Verkürzte Form: „conditional expression“ a = b > c ? b : c; condition ? true : false
9
Kontrollstrukturen: switch … case Kopf: switch (condition) condition muss ein Ganzzahldatentyp sein (incl. char!) Rumpf: case const_n: statement_n beliebige Anzahl von case-Klauseln Abarbeitung der Statements ab condition==const_n mittels break; wird der switch-Block verlassen Standardbearbeitung mittels default:
10
Kontrollstrukturen: switch … case switch (a) { case 1: cout << "a = 1" << endl; case 2: cout << "a < 3" << endl; break; case 3: cout << "a = 3" << endl; break; default: cout 3" << endl; }
11
Kontrollstrukturen: while while (condition) statement Überprüfung von condition vor Abarbeitung von statement ------------------------------------------------------------------------- do statement while (condition) Überprüfung von condition nach Abarbeitung von statement
12
Kontrollstrukturen: for for (init; condition; step-expr) statement Ausdrücke können leer sein break; Schleife wird sofort verlassen continue; nächster Schleifendurchlauf
13
Funktionen Zusammenfassung mehrerer Anweisungen [qualifier] retval function-name (param-list) { block-of-code } Funktionskopf und Funktionsrumpf Parameterübergabe immer call-by-value Rückgabewert über return expr;
14
Funktionen Strukturierung der Software Schaffung von Abstraktionslevel Gemeinsamkeiten von Code auf sinnvoll parametrisierbare Codestücke abbilden Deklaration: Signatur (Kopf) der Funktion vor der Benutzung (Prototyp)
15
Funktionen // function declaration int square(int num, bool show); // function call int b = 10; int a = square(b, true); // function definition int square(int num, bool show) { int result = num * num; if (show) cout << "Calculated result: " << result; return result; }
16
Funktionen – Overloading mehrere Funktionen mit dem selben Namen müssen sich in mindestens einem Parameter unterscheiden Anzahl und/oder Typ Unterscheidung durch Rückgabetyp reicht nicht aus int square(int num, bool show); float square(float num);
17
Funktionen – Overloading Name-Mangling bei Funktionsdeklaration interne Erweiterung des Funktionsnamens um Parametersatz und return-Wert (Typen) interne Aufhebung der Namensgleichheit Bei Funktionsaufruf Auswahl der passenden Funktion durch den Compiler nur Parametersatz zur Unterscheidung
18
Funktionen – Default Parameter Zuweisung des default-Wertes des Parameters in der Funktionsdeklaration int square(int num, bool show = false); Aufruf auch ohne Parameter möglich int b = 10; int a = square(b);
19
Funktionen – Default Parameter Anzahl Default-Parameter beliebig müssen alle am Ende der Parameterliste stehen Zuweisung von Werten von links nach rechts int defFunc(int v1, int v2 = 0, int v3=0, int v4=0);
20
Funktionen - inline Einfügen des Funktionscodes an die Aufrufstelle durch den Compiler Reduktion des Overheads durch einen Funktionsaufruf inline ist nur ein „Vorschlag“ an den Compiler Verwendung bei: kurzen Funktionen häufigen Aufrufen inline int square(int num) { return num * num; }
21
Funktionen - Rekursion Aufruf der Funktion aus sich selbst Gefahr von Endlosschleifen oder stack- overflow long fact(long num) { if (num <= 1) return 1; else return num * fact(num -1); }
22
Aufgabe 4: Spiel Zahlenraten Begrüßung Spieler gibt gewünschten Schwierigkeitsgrad an leicht: Bereich 1 – 10 mittel: Bereich 1 – 50 schwer: Bereich 1 – 500 Ermittlung der Zufallszahl Spieler rät, bis er die Zahl gefunden hat Hinweis geben, ob geratene Zahl größer oder kleiner als die gesuchte Zahl Verabschiedung mit Angabe der Anzahl der Versuche
23
Zufall – nicht wirklich Generator ermittelt Folge zufällig wirkender Zahlen komplexes Muster Muster immer gleich zufällige Initialisierung des Startwertes, meist über aktuelle Zeit Generator liefert Zahl zwischen 0 und 32.767 // Zufallsgenerator initialisieren srand(timeGetTime()); // Zufallszahl ermitteln int randomNumber = rand();
24
Einbinden von Bibliotheken Bibliotheken liegen in compiliertem Zustand vor Einbindung über #pragma comment (lib, "libName") ggf. libName mit vollständigem Pfad // Bibliothek zur Ermittlung der aktuellen Zeit #include #pragma comment (lib, "winmm.lib")
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.