38
Informatik 1 Übung 8

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

Embed Size (px)

Citation preview

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

Informatik 1

Übung 8

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

NACHBESPRECHUNGÜbung 8

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

Rekursion

• Existiert Weg von A nach B?

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

Rekursion

• Existiert Weg von A nach B?• Ja, falls:– Schritt von A zu A' möglich– Weg von A' nach B existiert

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

Rekursion

• Existiert Weg von A nach B?• Ja, falls:– Schritt von A zu A' möglich– Weg von A' nach B existiert

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

Rekursion

• Musterlösung

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

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

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

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

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

Debugging

• Live demo

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

WIEDERHOLUNGKlassen

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

Klassen

• Klasse– Bauanleitung

• Instanz einer Klasse– Objekt, nach Bauanleitung hergestellt

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

Klassen

• Nur Bauanleitung, kein Objekt

class Vektor{public: int x; int y;};

int main(){

return 0;}

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

Klassen

• Ein Objekt

class Vektor {public: int x; int y;};

int main(){ Vektor v; return 0;}

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

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

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

Klassen

• Member-Funktionen– Wie normale Funktionen– Versteckter (automatischer) this-Parameter– Müssen auf Objekten aufgerufen werden

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

Klassen

• Äquivalent ohne Member-Funktionenclass 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);}

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

Klassen

• Operatoren– Normale Funktionen, mit schöner Schreibweise– Parameter und Rückgabewert beliebig• Nicht alles macht Sinn

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

Klassen

• Äquivalent ohne Operatorenclass 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;}

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

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

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

Klassen

• Konstruktor / Destruktor– Wie normale Member-Funktionen– Werden automatisch aufgerufen

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

Klassen

• Äquivalent ohne Konstruktorenclass 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;}

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

Klassen

• Äquivalent ohne Konstruktorenclass Vektor {public: int x,y; Vektor(); Vektor(int i); ~Vektor();};

int main() { Vektor v; Vektor w(1); ... return 0;}

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

Klassen

• Instanzen einer Klasse kopieren• Automatisch– Member-Variablen werden 1:1 kopiert

• Manuell– Kopier-Konstruktor– Zuweisungs-Operator– Immer beide definieren

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

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

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

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

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

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;

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

Klassen

• Zugriffsrechte– Bezieht sich auf Member-Variablen und Member-

Funktionen• Was ist erlaubt?

Wer greift zu? Private Protected Public

Member-Funktion eigene Klasse Ja Ja Ja

Member-Funktion abgeleitete Klasse Nein Ja Ja

Member-Funktion fremde Klasse Nein Nein Ja

Globale Funktion Nein Nein Ja

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

Klassen

• Friend– Gewährt uneigeschränkten Zugriff

• Public– Alle Funktionen

• Private– Nur eigene Member-Funktionen

• Protected– Zusätzlich Member-Funktionen von abgeleiteten

Klassen

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

WIEDERHOLUNGVererbung

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

Klassen

• Vererbung– Bauplan erweitern– Alten Bauplan übernehmen, mehr anhängen

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

Klassen

• Basisklasse• Abgeleitete Klasse– Übernimmt alle Member-Variablen und

Funktionen der Basisklasse

class Base{};

class Derived : public Base {};

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

Klassen

• Äquivalent ohne Vererbungclass 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;};

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

Klassen

• Funktionen überladen• Abgeleitete Klasse übernimmt alle Funktionen• Funktionen in abgeleiteter Klasse mit gleicher

Signatur ersetzt Funktion der Basisklasse

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

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

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

Klassen

• Vererbung vs. Kompositionclass 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;};

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

C++ FAQ lite

• http://www.parashift.com/c++-faq-lite• Beantwortet alle schweren Fragen zu C++

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

ÜBUNGSerie 10

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

Aufgabe 1

• Übersicht OperatorenOperator Definition

+ Vektor operator+(const Vektor& other);

+= void operator+=(const Vektor& other);

= Vektor& operator=(const Vektor& other);

copy constructor Vektor(const Vektor& other);