52
Informatik 1 Übung 7

Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Embed Size (px)

Citation preview

Page 1: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Informatik 1

Übung 7

Page 2: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

NACHBESPRECHUNGÜbung 6

Page 3: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

SCOPE

Page 4: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Variablen

• Lebensdauer/Sichtbarkeit (Scope)– bis zur schliessenden Klammer

int g;int main() { int x = 0; for(int i = 0; i<10; i++) { int y = i*2; x += y; }}

Page 5: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Variablen

• Lebensdauer/Sichtbarkeit (Scope)– bis zur schliessenden Klammer

int g;int main() { int x = 0; for(int i = 0; i<10; i++) { int y = i*2; x += y; }}

gggg, xg, x, ig, x, ig, x, i, yg, x, i, yg, xg

Page 6: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Variablen

• Gleicher Variablenname, anderer Scope– nur bei Zählvariablen verwenden

int main() { { int i = 0; } { int i = 0; }}

Page 7: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Variablen

• Gleicher Variablenname, geschachtelter Scope– nie verwenden

int main() { { int i = 0; { int i = 0; } }}

Page 8: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

REFERENZEN

Page 9: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

lvalue vs. rvalue

• lvalue– Alles was links von einer Zuweisung stehen kann– Alles was eine Adresse im Speicher hat– Variablen

• rvalue– Ausdrücke

int i;i = 100;i+1 = 100;

int a[10];a[1] = 100;1*a[1] = 100;

Page 10: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Referenzen

• Referenzen sind wie Synonyme

int i;int& r = i;

// r und i sind jetzt "die selbe Variable"i = 100;r = 100;

Page 11: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Referenzen

• Vergleich mit Zeigern

Referenzen Zeiger

Ziel änderbar Nein Ja

Wert vom Ziel änderbar Ja Ja

Variablen typ& name = ziel; typ* name;

Beispiel int x,y;int& z = x;z = 2; // z = y; nicht erlaubt

int x,y;int* z = &x;*z = 2;z = &y;

Page 12: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

FUNKTIONEN

Page 13: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Funktionen

• Parameter sind neue Variablen– nur innerhalb der Funktion sichtbar

• Vor dem Aufruf werden die Werte kopiert

Page 14: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Funktionenint summe(int a, int b){ return a + b;}

int main(){ int i = summe(1,2);}

Page 15: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Funktionenint summe(int a, int b){ return a + b;}

int main(){ int i = summe(1,2);}

int main(){ // summe – anfang int param_a; int param_b; param_a = 1; param_b = 2; int result = param_a + param_b; // summe – ende

int i = result;}

Page 16: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Funktionen

• Referenzen für Call by Reference

void increase(int& a) { a = a + 1; }

int main() { int x = 1; increase(x);}

int increase(int a) { return a + 1;}

int main() { int x = 1; x = increase(x);}

Page 17: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Funktionen

• Referenzen für Call by Reference

float intersect(ray strahl, Vector3f& normale) { normale = Vector3f(0,0,0); return 0;}

int main() { Vector3f normale; float distance; ray strahl; distance = intersect(strahl, normale);}

Page 18: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Funktionen

• Array ausgeben– Zeiger = Array– Referenz, um den Zeiger zu ändern

void createArray(int*& result, int size){ result = new int[size];}

int main(){ int* array; createArray(array, 10);}

Page 19: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

SPEICHER

Page 20: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Speicher

• Stack– lokale Variablen– klein– automatische Reservierung und Freigabe

• Heap– mit new erstellte Objekte– gross– Reservierung und Freigabe mit new bzw delete

Page 21: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack

Name Addresse Inhalt

0000

0001

0002

0003

0004

0005

0006

01: int main() 02: {03: int x = 0;04: for(int i = 0; i<10; i++)05: {06: int y = i*2;07: x += y;08: }09: }

Page 22: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack

Name Addresse Inhalt

x 0000 0

0001

0002

0003

0004

0005

0006

01: int main() 02: {03: int x = 0;04: for(int i = 0; i<10; i++)05: {06: int y = i*2;07: x += y;08: }09: }

Page 23: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack

Name Addresse Inhalt

x 0000 0

i 0001 0

0002

0003

0004

0005

0006

01: int main() 02: {03: int x = 0;04: for(int i = 0; i<10; i++)05: {06: int y = i*2;07: x += y;08: }09: }

Page 24: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack

Name Addresse Inhalt

x 0000 0

i 0001 0

y 0002 0

0003

0004

0005

0006

01: int main() 02: {03: int x = 0;04: for(int i = 0; i<10; i++)05: {06: int y = i*2;07: x += y;08: }09: }

Page 25: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack

Name Addresse Inhalt

x 0000 0

0001

0002

0003

0004

0005

0006

01: int main() 02: {03: int x = 0;04: for(int i = 0; i<10; i++)05: {06: int y = i*2;07: x += y;08: }09: }

Page 26: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

STACK UND FUNKTIONEN

Page 27: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 ???

0001

0002

0003

0004

0005

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 28: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 ???

return address 0001 08

result 0002 ???

a 0003 1

b 0004 2

0005

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 29: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 ???

return address 0001 08

result 0002 ???

a 0003 1

b 0004 2

0005

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 30: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 ???

return address 0001 08

result 0002 ???

a 0003 1

b 0004 2

s 0005 3

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 31: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 ???

return address 0001 08

result 0002 3

a 0003 1

b 0004 2

s 0005 3

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 32: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 ???

return address 0001 08

result 0002 3

0003

0004

0005

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 33: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 3

return address 0001 08

result 0002 3

0003

0004

0005

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 34: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Stack und Funktionen

Name Addresse Inhalt

i 0000 3

0001

0002

0003

0004

0005

0006

01: int summe(int a, int b)02: {03: int s = a + b;03: return s;04: }05: 06: int main()07: {08: int i = summe(1,2);09: }

Page 35: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

WIEDERHOLUNGVorlesung 6

Page 36: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Überladen von Funktionen

• Erlaubt:– selber Funktionsname– andere Parameter-Typen– "function overloading"

• Auswahl der verwendeten Version– Bestimmt der Compiler– Die Version wo alle Typen übereinstimmen

Page 37: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Überladen von Funktionen

float summe(float a, float b) { return a + b; } // Version 1int summe(int a, int b) { return a + b; } // Version 2

int main() { cout << summe(1, 2); // Version 2 aufgerufen cout << summe(1.0f, 2.0f); // Version 1 aufgerufen}

Page 38: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Klassen

• Wie stuct, zusätzlich– Zugriffsart– Member-Funktionen*– Konstruktoren/Destruktoren*

* theoretisch auch für structs verfügbar

Page 39: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Klassen

• Struct

// Neuen Typ definierenstruct Vektor{ int x; int y;};

// Ein Objekt (Instanz) vom neuen Typ erstellenVektor v;

Page 40: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Klassen

• Class

// Neuen Typ definierenclass Vektor {private: int x; int y;};

// Ein Objekt (Instanz) vom neuen Typ erstellenVektor v;

Page 41: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Methoden

• Wie Funktionen– arbeiten auf einem Objekt– this: Zeiger auf bearbeitetes Objekt

• Deklaration in der Klasse• Definition innerhalb oder ausserhalb

Page 42: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Methoden

class Vektor {public: float get_norm() { return x + y };private: int x; int y;};

int main() { Vektor v; float f = v.get_norm();}

Page 43: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Methoden

class Vektor {public: float get_norm();private: int x; int y;};

float Vektor::get_norm() { return x + y}

int main() { Vektor v; float f = v.get_norm();}

Page 44: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Methoden

class Vektor {public: float get_norm();private: int x; int y;};

float Vektor::get_norm() { return this->x + this->y}

int main() { Vektor v; float f = v.get_norm();}

Page 45: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Konstruktoren

• Konstruktor– spezielle Methode– wird automatisch aufgerufen, wenn Objekt erstellt

wird• Destruktor– spezielle Methode– wird automatisch aufgerufen, wenn Objekt

gelöscht wird

Page 46: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Konstruktoren

• Syntax Konstruktor– Wie Funktion– kein Rückgabewert– Name gleich wie Klasse

• Syntax Destruktor– Tilde (~) vor dem Namen

Page 47: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Konstruktoren

class Vektor {public: Vektor(); ~Vektor();private: int x, y;};

Page 48: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Konstruktoren

class Vektor {public: Vektor();private: int x, y;};

float Vektor::Vektor() { x = 0; y = 0;}

int main() { Vektor v;}

Page 49: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Konstruktorenclass Vektor {public: Vektor(int a, int b);private: int x, y;};

float Vektor::Vektor(int a, int b) { x = a; y = b;}

int main() { Vektor v(1, 2);}

Page 50: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Zugriffsrechte

• public– jeder kann die Daten benutzen

• private– nur die eigene Klasse– z.B. in Methoden

• protected– kommt später

Page 51: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

Zugriffsrechteclass Vektor {public: int x;private: int y;};

int main() { Vektor v; v.x = 1; // v.y = 2; nicht erlaubt}

Page 52: Informatik 1 Übung 7. NACHBESPRECHUNG Übung 6 SCOPE

ÜBUNGSerie 7