170 likes | 291 Views
17.06.2012. Prof. R. Zavodnik/C Vorlesung/Kap. 9. 2. Reihungen und Konstruktoren. Problem: Wie initialisiert man Reihungen von Objekten?Antwort: Mit Konstruktoren in den geschweiften Klammern. 17.06.2012. Prof. R. Zavodnik/C Vorlesung/Kap. 9. 3. Beispiel.
E N D
1. Zeiger und Objekte Ohne Zeiger kein Polymorphismus
S. Freud 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 1
2. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 2 Reihungen und Konstruktoren Problem: Wie initialisiert man Reihungen von Objekten?
Antwort: Mit Konstruktoren in den geschweiften Klammern
3. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 3 Beispiel
4. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 4 Zeiger auf Objekte Sind wie Zeiger auf struct in C++ zu schreiben
Jedes Objekt besitzt einen besonderen Zeiger: this
this ist die Speicheradresse des Objekts
Typ ist Zeiger auf Klassentyp i. A.
Typ ist Zeiger auf konstanten Klassentyp fr const Klassen
5. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 5 Beispiel
6. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 6 Bemerkungen Man achte auf den Fall fr Selbst-Kopierung
Das Ergebnis ist die Kopie, d.h. das Objekt, auf das kopiert wird
friend-Funktionen haben keine Zugriffsberechtigung auf this
7. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 7 Dynamische Klassenobjekte Wie immer, mit new
Dynamische Erzeugung von Objekten verursacht Aufruf von Konstruktoren
Selbstgestrickte new gibt es auch
8. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 8 Syntax
9. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 9 Bemerkungen Normalerweise mit new allozierter Speicher wird nicht initialisiert (wie malloc())
?Initialisierung durch Konstruktoren
Reihungen knnen nicht so initialisert werden (siehe oben)
delete ruft den Destruktor auf
10. Beispiel Ohne Initialisierung 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 10
11. Beispiel mit Initialisierung 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 11
12. Beispiel Allozierung von Reihungen von Klassen 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 12
13. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 13 Bemerkungen Reihungsgrenzen knnen auch erst zur Laufzeit bekannt sein
Dynamische Allozierung von const Objekten auch mglich, z.B. const float *p = new const float(3.14);
Bei delete fr Reihungen von Klassenobjekten werden Destruktoren aufgerufen
14. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 14 Beispiel: Klassendefinition
15. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 15 Beispiel: Hauptprogramm
16. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 16 Ausgabe
17. 18.06.2012 Prof. R. Zavodnik/C++ Vorlesung/Kap. 9 17 Fehler bei Heap-Allozierung delete nicht korrekt angewandt. Ergebnis: memory leak
delete auf ein Objekt mehrmals angewandt (z.B. ber Zeiger). Knnte ein neues Objekt korompieren!
Anwendung oder Zuweisung von Objekten nach Ihrer De-Allozierung. Ergebnis:???