Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Katinka Block Geändert vor über 10 Jahren
1
Informatik 1 Übung 8
2
NACHBESPRECHUNG Übung 8
3
Rekursion Existiert Weg von A nach B?
4
Rekursion Existiert Weg von A nach B? Ja, falls: – Schritt von A zu A' möglich – Weg von A' nach B existiert
5
Rekursion Existiert Weg von A nach B? Ja, falls: – Schritt von A zu A' möglich – Weg von A' nach B existiert
6
Rekursion Musterlösung
7
Strings Typ string – Operatoren !=, ==,,... Typ char* oder char[N] – Funktionen strcmp, strcpy,... string s1 = "abc"; string s2 = "def"; if(s1 > s2) { s1 = s2; } cin >> s2; char s1[4] = "abc"; char s2[4] = "def"; if(strcmp(s1,s2)>0) { strcpy(s1,s2); } cin.getline(s2,3);
8
Listen Auf Blatt aufzeichnen Jeden Zeiger auf Gültigkeit prüfen Sonderfälle – Liste leer – Erstes/letztes Element einfügen head data next data next data next data next
9
Debugging Live demo
10
WIEDERHOLUNG Klassen
11
Klasse – Bauanleitung Instanz einer Klasse – Objekt, nach Bauanleitung hergestellt
12
Klassen Nur Bauanleitung, kein Objekt class Vektor { public: int x; int y; }; int main() { return 0; }
13
Klassen Ein Objekt class Vektor { public: int x; int y; }; int main() { Vektor v; return 0; }
14
Klassen Äquivalent ohne Klassen class Vektor { public: int x; int y; }; int main() { Vektor v; return v.x; } int main() { int v_x; int v_y; return v_x; }
15
Klassen Member-Funktionen – Wie normale Funktionen – Versteckter (automatischer) this-Parameter – Müssen auf Objekten aufgerufen werden
16
Klassen Äquivalent ohne Member-Funktionen class Vektor { public: int x,y; int getLength() ; }; int Vektor::getLength() { return x*x+y*y; } int main() { Vektor v; return v.getLength(); } class Vektor { public: int x,y; } int Vektor_getLength(Vektor* this) { return this->x*this->x+this->y*this->y; } int main() { Vektor v; return Vektor_getLength(v); }
17
Klassen Operatoren – Normale Funktionen, mit schöner Schreibweise – Parameter und Rückgabewert beliebig Nicht alles macht Sinn
18
Klassen Äquivalent ohne Operatoren class Vektor { public: int x,y; Vektor scale(int s) ; }; int main() { Vektor v, w; w = v.scale(2); return 0; } class Vektor { public: int x,y; Vektor operator*(int s) ; }; int main() { Vektor v, w; w = v.operator*(2); return 0; } class Vektor { public: int x,y; Vektor operator*(int s) ; }; int main() { Vektor v, w; w = v*2; return 0; }
19
Klassen Definition innerhalb der Klasse – Member-Funktion mit einem Parameter Definition ausserhalb der Klasse – Normale Funktion mit zwei Parametern class Vektor { public: int x,y; Vektor operator*(int s) ; }; class Vektor { public: int x,y; }; Vektor operator*(const Vektor& v, int s) ;
20
Klassen Konstruktor / Destruktor – Wie normale Member-Funktionen – Werden automatisch aufgerufen
21
Klassen Äquivalent ohne Konstruktoren class Vektor { public: int x,y; Vektor(); ~Vektor(); }; int main() { Vektor v;... return 0; } class Vektor { public: int x,y; void construct(); void destroy(); }; int main() { Vektor v; v.construct(); // automatisch aufgerufen... v.destroy(); // automatisch aufgerufen return 0; }
22
Klassen Äquivalent ohne Konstruktoren class Vektor { public: int x,y; Vektor(); Vektor(int i); ~Vektor(); }; int main() { Vektor v; Vektor w(1);... return 0; }
23
Klassen Instanzen einer Klasse kopieren Automatisch – Member-Variablen werden 1:1 kopiert Manuell – Kopier-Konstruktor – Zuweisungs-Operator – Immer beide definieren
24
Klassen Wieso? – Wenn Objekte externe Resourcen allozieren class Vektor{ public: Vektor(int length) private: float* elements; int length; }; Vektor::Vektor(int l) { elements = new int[length]; length = l; } int main() { Vektor v1(3); Vektor v2(3); v1 = v2; }
25
Klassen Kopier-Konstruktor – Normaler Konstruktor mit einem Parameter Am besten konstante Referenz auf Objekt class A{ public: A (const A& other) ; }; A a1; A a2 = a1; // A a2(a1);
26
Klassen Zuweisungs-Operator – Normaler Operator mit einem Parameter Am besten konstante Referenz auf Objekt – Rückgabewert beliebig Am besten Referenz auf eigenes Objekt (return *this) class A{ public: A& operator=(const A& other) ; }; A a1, a2; a2 = a1;
27
Klassen Zugriffsrechte – Bezieht sich auf Member-Variablen und Member- Funktionen Was ist erlaubt? Wer greift zu?PrivateProtectedPublic Member-Funktion eigene KlasseJa Member-Funktion abgeleitete KlasseNeinJa Member-Funktion fremde KlasseNein Ja Globale FunktionNein Ja
28
Klassen Friend – Gewährt uneigeschränkten Zugriff Public – Alle Funktionen Private – Nur eigene Member-Funktionen Protected – Zusätzlich Member-Funktionen von abgeleiteten Klassen
29
WIEDERHOLUNG Vererbung
30
Klassen Vererbung – Bauplan erweitern – Alten Bauplan übernehmen, mehr anhängen
31
Klassen Basisklasse Abgeleitete Klasse – Übernimmt alle Member-Variablen und Funktionen der Basisklasse class Base{ }; class Derived : public Base { };
32
Klassen Äquivalent ohne Vererbung class A{ public: int x,y; }; class B : public A { public: int z; }; struct A{ int x,y; }; struct B { A base; int z; }; struct A{ int x,y; }; struct B { int x; int y; int z; };
33
Klassen Funktionen überladen Abgeleitete Klasse übernimmt alle Funktionen Funktionen in abgeleiteter Klasse mit gleicher Signatur ersetzt Funktion der Basisklasse
34
Klassen Vererbung vs. Komposition Vererbung: "ist ein" – Auto ist ein Fahrzeug – Klasse Auto vererbt von der Klasse Fahrzeug Komposition: "hat ein" – Auto hat einen Motor – Klasse Auto hat eine Member-Variable motor
35
Klassen Vererbung vs. Komposition class A{ public: int x,y; }; class B : public A { public: int z; }; class A{ public: int x,y; }; class B{ public: A a; int z; };
36
C++ FAQ lite http://www.parashift.com/c++-faq-lite Beantwortet alle schweren Fragen zu C++
37
ÜBUNG Serie 10
38
Aufgabe 1 Übersicht Operatoren OperatorDefinition +Vektor operator+(const Vektor& other); +=void operator+=(const Vektor& other); =Vektor& operator=(const Vektor& other); copy constructorVektor(const Vektor& other);
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.