Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?"—  Präsentation transkript:

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);


Herunterladen ppt "Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?"

Ähnliche Präsentationen


Google-Anzeigen