1 / 85

Programmieren Teil: Objektorientierung

Programmieren Teil: Objektorientierung. Franz-Josef Behr WS 2002/2003. Literatur. P.Prinz, U.Kirch-Prinz: C ++, Lernen und professionell anwenden , MITP-Verlag, 1999

summer
Download Presentation

Programmieren Teil: Objektorientierung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ProgrammierenTeil: Objektorientierung Franz-Josef Behr WS 2002/2003 Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2002

  2. Literatur • P.Prinz, U.Kirch-Prinz: C ++, Lernen und professionell anwenden, MITP-Verlag, 1999 • Martin Auppele: Die Kunst der Programmierung mit C++. Exakte Grundlagen für die professionelle Softwareentwicklung. Vieweg, ISBN 3-528-15481-0, 1042 S. • Stroustrup, Bjarne: Die C++-Programmiersprache; Addison-Wesley, 2000, 1048 S. • Liberty, Jesse: C++ in 21 Tagen. Markt und Technik, 2000 • Louis, Dirk: C/C++ Kompendium, Markt & Technik, 2000, 1259 S. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  3. Was gibt’s überhaupt? • Klassen und Objekte • Konstruktoren • Konstruktoren für dynamische Objekte • Destruktor • Der this-zeiger • Felder von Objekten • Eigene Datentypen und Streams • Speicherverwaltung in C++ Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  4. Was gibt’s heute? Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  5. Eigenschaften von C++ • Enthält C als Teilmenge (modular, effizient, maschinennah, portabel) • Erweiterungen zu C sind Referenzen, Templates, Ausnahmebehandlung,... • Mischsprache (nicht rein objektorientiert, kennt auch Standardtypen und prozedurale Abläufe) • Formatfreie Sprache • strenge Typkontrolle durch Compiler • Unterstützt Konzepte der OOP (Kapselung, Vererbung, Polymorphie) Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  6. Geschichte von C++ • Anfang der 80er Jahre von Bjarne Stroustrup von AT&T entwickelt. • echte Obermenge von C - jedes gültige C-Programm ist auch ein gültiges C++-Programm. Anstoß zur Entwicklung: Bewältigung der Komplexität, das Betriebssystem UNIX so aufzuteilen, daß es auch auf mehreren CPUs laufen konnte. • 1985: AT&T entwickelt ersten kommerziellen C++-Compiler • seit 1990: ANSI-Komitee X3J16 zur Standardisierung von C++. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  7. Klassisches, prozedurales Konzept • Daten und Funktionen keine Einheit. • Problemfelder: • Fehlerhafte, unzulässige Zugriffe, • Nicht-initalisierte Variablen, • ... Funktion Funktion Funktion Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  8. Objektorientiertes Konzept Objekt 1 Objekt 2 EigenschaftenMethoden EigenschaftenMethoden Nachricht Kennzeichen: • Datenabstraktion • Datenkapselung • Vererbung • Polymorphie Nachricht • [Erhoffte] Vorteile:: • Kein Bruch zwischen Design und Implementierung, • Höhere Softwaresicherheit • Wiederverwendung von Code Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  9. Warum Objektorientierung? • Objektorientierung nicht nur bei Programmierung, sondern auch in • Datenbanktechnologie, GIS-Technologie, • Entwurf von Benutzeroberflächen, • Analyse und Software-Design. • Grundidee: Objekte der realen Welt abbilden. • Objekte sind „Bausteine“ für Programme. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  10. Objekt - Definition • Definition:Ein Objekt ist eine Software-Einheit, die aus Daten (Attributen) und Funktionalitäten (Verhalten, Methoden) besteht. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  11. Eigenschaften / Attribute • Definition:Ein Attribut ist eine benannte, charakteristische Eigenschaft eines Objekts bzw. aller Objekte (Instanzen) einer Klasse. • Eigenschaften werden als Attribute geführt. Diese sind • Datenelemente eines bestimmten Datentyps, • Bezeichnet durch einen Namen, • In denen Werte gespeichert und aus denen Werte ausgelesen werden können. • Beispiele: • Name eines Professors: Attribut = „Name“, Wert = „Behr“, Typ = „Zeichenkette“ • Hähnchen in der Mensa: Attribut = „Knusprigkeit“, Wert = „2“, Typ = „ganzzahlig“ Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  12. Beispiel für Abstraktion Objekte Gebäude Instanziierung Abstraktion • Eigenschaften • Grundfläche • Anzahl Stockwerke • Einheitswert • ... • Methoden • Errichten • Abreissen • Reinigen • ... • Gebäude ...: • Eigenschaften • Grundfläche: 45 qm • Anzahl Stockwerke: 3 • Einheitswert: 21900,-- • ...Methoden • ... • Gebäude 2: • Eigenschaften • Grundfläche: 45 qm • Anzahl Stockwerke: 3 • Einheitswert: 21900,-- • ...Methoden • ... • Gebäude 1: • Eigenschaften • Grundfläche: 45 qm • Anzahl Stockwerke: 3 • Einheitswert: 21900,-- • ...Methoden • ... Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  13. Kapselung • Definition:Kapselung bedeutet, dass Daten und Implementation nach außen hin unsichtbar sind.Der Zugriff auf die Eigenschaften (Attribute und Methoden) von Objekten wird nur gemäß der Schnittstellenbeschreibung gewährt („öffentliche Schnittstelle“). • Ziele: • Verbergen möglicherweise komplizierter Einzelheiten, • Klare Definition der Schnittstelle, • Unabhängigkeit der Benutzung eines Objekts von seiner Implementierung im Detail – Implementierung austauschbar. Quelle: http://asi-www.informatik.uni-hamburg.de/lehre/nf/ Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  14. Kapselung Objekt • Eigenschaften: private • Setzen und Abfragen nur über get- und set-Methoden Methoden Eigenschaften Eigenschaften ÖffentlicheSchnittstellen Eigenschaften ÖffentlicheSchnittstellen Methoden Methoden Methoden Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  15. struct Identifier { variableDefinition ; } ; Zusammengesetzte Datentypen - Strukturen • Struktur (struct, record): • Zusammengesetzter heterogener Datentyp • Zusammenfassung von Variablen beliebiger Datentypen •  Gemeinsame Verarbeitung dieser Elemente/Daten/Werte • Deklaration struct GeoPoint{ double dftEasting, dftNorthing;}; Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  16. Definition von Variablen des Typs "Struktur" • Definition einer Strukturvariablen erfolgt analog zur bekannten Variablendefinition durchTypname Variablenname • Beispiel: struct GeoPoint{ double dftEasting, dftNorthing;};Point p1, p2, pn; Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  17. Zugriff auf Elemente einer Strukturvariablen • Verwendung des Zugriffs-/Auswahloperators zwischen Name der Strukturvariablen und Membername • Bsp.:p1.dftEasting = 3513189.891;p1.dftNorthing = 5404181.142; • Struktur = Bezugsrahmen für Membernamen Definition gleichnamiger Variablen erlaubt!double dftEasting = 3500000;p1.dftEasting = dftEasting; Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  18. Strukturvariablen – Kopieren ... • Sie können Strukturen kopieren mittels Zuweisungsoperator =GePoint p2;p2 = p1; • Zeiger auf Strukturen analog zu anderen Zeigern:strukturname * pointername;GeoPoint* ptrGeoPoint = &p1; • Zugriff auf Member via Zeiger: • Dereferenzierung * (incl. Klammern ())und Auswahloperator .(* ptrGeoPoint).dftEasting += 10; • Verweisoperator ->ptrGeoPoint->dftNorthing -= 10; ptrGeoPoint verweist auf die Stelle im Speicher, an der p1 gespeichert ist. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  19. Sicherheit? • The use of structs is discouraged since these only contain public data. • In interfaces with other languages (such as C), it may, however, be necessary to use structs. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  20. Ausgangssituation: C-Strukturen Zusammenfassung zusammengehörender Daten+Erlaubte Operationen+Zugriffskontrollmechanismen+ Weitere Spezialitäten= C++ > > > Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  21. Erweiterung von Strukturen Zusammenfassung zusammengehörender Daten (Attribute) + erlaubte Operationen (Methoden) Klassen werden deklariert und definiert Schablone für zu erzeugende Variablen Variablen von Klassen = Objekte Erzeugung von Objekten über spezielle Methoden Konstruktoren Zerstörung von von Objekten Destruktor Zugriffsmechanismen für geschützte und öffentliche Bereiche Klassen stehen untereinander in einer hierarchischen Ordnung Klassen Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  22. Deklaration einer Klasse • Ähnlich wie Deklaration von Strukturen Schlüsselwort class (statt struct)class CGeoPoint{ private: char szId[20]; double dftEasting; double dftNorthing;}; Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  23. Anlegen von Objekten • class CGeoPoint p1, p2, p3; P33500005.05400005.0 P13500000.05400000.0 P23500005.05400000.0 Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  24. Unterschiede zwischen Strukturen und Klassen • Unterschiede: • syntaktisch: Schlüsselwort class (statt struct) • semantisch: Zugriff nicht ohne weiteres möglich • Datenkapselung mittels Schlüsselwörter • private kein Zugriff von außen möglich • public Definition von öffentlichen Attributen • Wenn alle Attribute einer Klasse == public: Klasse entspricht Struktur! Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  25. Fragespiel • Nennen Sie die Unterschiede zwischen einer Struktur und einer Klasse in C++. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  26. Klassendeklaration classtyp • Standard: class • Ebenfalls möglich: struct, union, da diese spezielle C++-Klassen darstellen. • Empfehlung: nur class verwenden • Generelle Form:classtyp klassenname{ public: ELEMENTE protected: ELEMENTE private: ELEMENTE} instanzen; • Klassenname • Name der zu deklarierenden Klasse Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  27. Klassendeklaration II • Public, protected, private • Zugriffsmodifizierer, • legen fest, auf welche Elemente der Klasse von außen zugegriffen werden kann. • Generelle Form:classtyp klassenname{ public: ELEMENTE protected: ELEMENTE private: ELEMENTE} instanzen; • ELEMENTE • Deklaration und ggf. Definition von Datenelementen und Elementfunktionen • instanzen • Definition von Instanzen (Variablen) dieses Klassentyps • Optional (an dieser Stelle)! Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  28. Deklaration und Definition • Die Deklaration einer Klasse sagt dem Compiler, um welche Klasse es sich handelt, welche Daten sie aufnimmt und welche Funktionen sie ausführt. Die Deklaration der Klasse bezeichnet man als Schnittstelle (Interface), da der Benutzer hieraus die Einzelheiten zur Interaktion mit der Klasse entnehmen kann. Die Schnittstelle speichert man in der Regel in einer .h-Datei, einer sogenannten Header-Datei. • Die Funktionsdefinition sagt dem Compiler, wie die Funktion arbeitet. Man bezeichnet die Funktionsdefinition als Implementierung der Klassenmethode und legt sie in einer .cpp-Datei ab. Die Implementierungsdetails der Klasse sind nur für den Autor der Klasse von Belang. Klienten der Klasse - das heißt, die Teile des Programms, die die Klasse verwenden - brauchen nicht zu wissen (und sich nicht darum zu kümmern), wie die Funktionen implementiert sind. Quelle: Liberty, Jesse: C++ in 21 Tagen. Markt und Technik, 2000 Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  29. Hello World – objektorientiert II • Klasse, Instanziierung und Aufruf in main. #include <iostream.h>#include <string.h>class MyMessage{public: MyMessage (char * pszString) { strcpy(szMessage,pszString); } void show() { cout << szMessage << endl;}private: char szMessage[256];};int main(int argc, char* argv[ ], char* envp[ ]){ MyMessage hello("Hello World!"); hello.show(); cout << PROGNAME << " finished." << endl; return 0;} Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  30. Deklaration von Objekten • Voraussetzung: Klasse ist definiert. • Wie bei Variablen üblich, erfolgt die Deklaration durch Angabe des Datentyps und den Namen des Objekts. • Syntax:Klassenname Objektbezeichner1 [Objektbezeichner2, ...]; • BeispielCGeoPoint p1; • Effekt: • Für die Daten des Objekts p1 wird der entsprechende Speicherplatz reserviert. • Es erfolgt keine Initialisierung (Konstruktoren!). • Sind die Datenelemente public, so können den Datenelementen Werte zugewiesen werden usw. Instanziierung Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  31. Zugriff auf Elemente • Zugriff auf Elemente kann nur auf public-Elemente erfolgen. • Zugriff erfolgt wie bei Strukturvariablen mit Hilfe des Punkt- oder des Pfeiloperators. • Beispiel für Zugriff auf Datenelemente:CGeoPoint p1;p1.dftEasting = 3500000.0;p1.dftNorthing = 5400000.0; • Beispiel für Zugriff auf Elementfunktionen:CGeoPoint p1;p1.setcoords(3500000.0,5400000.0); Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  32. Zugriff auf Elemente über den Pfeiloperator • Wenn ein Zeiger (pointer) auf ein Objekt weist, kann auf public-Elemente über den Pfeiloperator -> zugegriffen werden. CGeoPoint::setCoords(double x, double y){ dftEasting = x; dftNorthing = y;}CGeoPoint::printCoords(){ cout << "Point " << id << ": " << dftEasting << ", " << dftNorthing << " " <<endl;}...CGeoPoint p3, *ptPoint; ptPoint = &p3; // ptPoint zeigt auf p3; ptPoint->setCoords(3600000.0, 5500000.0);// Koord.setzen ptPoint->printCoords(); // Koord. ausgeben p3.printCoords(); // für p3 natürlich identische Ausgabe. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  33. Konstruktoren • Werden durch Definition von Instanzen (= Variablen eines Klassentyps) aufgerufen • Name des Konstruktors: identisch mit Klassennamen • i. d. R. im public-Bereich, für uneingeschränkten Zugriff. • Konstruktor besitzt keinen Ergebnistyp – auch nicht void! • Dient der Initialisierung von Datenelementen der Klasse • Ein Konstruktor kann nicht direkt aufgerufen werden (um z.B. eine nochmalige Initialisierung zu erreichen). Die Verknüpfung von Instanzbildung und Initialisierung durch den Konstruktor entspricht dem objektorientierten Prinzip der Kapselung. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  34. Default-Konstruktor • Kein selbstdefinierter Konstruktor? Compiler erzeugt minimalen Standardkonstruktor (ohne Initialisierung) selbst. • Ist wenigstens ein eigener Konstruktor definiert, muss auch der parameterlose Default-Konstruktor selbst definiert werden, soll er denn zur Verfügung stehen. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  35. Verwendung mehrerer Konstruktoren • Werden mehrere Konstruktoren definiert ("Überladen von Funktionen"), kann einer dieser Konstruktoren für die Instanziierung ausgesucht werden. CGeoPoint::CGeoPoint() // Konstruktor{ cout << "Default-Konstruktor aufgerufen" << endl; strcpy(id,"0"); dftEasting = 0.0; dftNorthing = 0.0;} CGeoPoint::CGeoPoint(double x, double y) // Konstruktor 2{ cout << "Konstruktor 2 aufgerufen (" << x << ", " << y << ")" <<endl; strcpy(id,"0"); dftEasting = x; dftNorthing = y;}... CGeoPoint p1; p1.dftEasting = 3500000.0; p1.dftNorthing = 5400000.0; CGeoPoint p2(3500000.0,5400000.0); Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  36. Aufgabe • Schreiben Sie einen weiteren Konstruktor, der ein Punktobjekt mit Punktnummer, Rechts- und Hochwert initialisiert. • Testen Sie Ihren Konstruktor, in dem Sie weitere Objekte über diesen Konstruktor definieren und sich ihre Werte anzeigen lassen (Memberfunktion displayValues). Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  37. Fragespiel • Was macht • Ein Konstruktor? • Ein Destruktor? • Wie lautet die Syntax? • Warum mehrere Konstruktoren? • Was ist eine Instanz? Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  38. Initialisierung mittels Initialisierungsliste • Initialisierungsliste enthält alle Initialisierungen, die beim Aufruf des Konstruktors ausgeführt werden. • durch einen Doppelpunkt (:) vom Funktionskopf getrennt; • wird vor dem eigentlichen Anweisungsteil eines Konstruktors ausgeführt class CGeoPoint{ private: char id[20]; double dftEasting; double dftNorthing;public: CGeoPoint::CGeoPoint(double x, double y): dftEasting(x), dftNorthing(y) { strcpy(id,"0"); }...int main(){ CGeoPoint p1(3500000.0,5400000.0); … Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  39. Konstruktoraufruf mit Wertzuweisung • Wenn Konstruktor nur einen Parameter hat, kann man den Übergabewert beim Definieren des Objekts auch einfach zuweisen, statt eine eingeklammerte Übergabe auszuführen: class CGeoPoint {...}CGeoPoint::CGeoPoint(char * szInitId) // Konstruktor{ cout << "Konstruktor 4 für Punkt " << szInitId << endl; strcpy(szId,szInitId);dftEasting = 0.0;dftNorthing = 0.0;}... // Definition eines Objekts mit zugewiesenem Parameterwert: CGeoPoint p3b = "10"; Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  40. Kopierkonstruktor • Definition:Klassenname::Klassenname(const Klassenname & Muster); • Kein eigener Kopierkonstruktor? Compiler erzeugt minimalen Standard-Kopierkonstruktor. • Dieser kopiert die Daten des übergebenen Objekts in das neue Objekt. • Beispiele für Aufruf: class CGeoPoint p20 = p3; class CGeoPoint p21(p3); Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  41. Kopierkonstruktor: Beispiel CGeoPoint::CGeoPoint (const CGeoPoint & SamplePoint){ cout << "Kopierkonstruktor aufgerufen (" << SamplePoint.szId << ")" <<endl; strcpy(szId,SamplePoint.szId); dftEasting = SamplePoint.dftEasting; dftNorthing = SamplePoint.dftNorthing;} Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  42. Kopierkonstruktoren für dynamische Elemente • Problem: Duplizierung nicht ausreichend, da • sonst beide Elemente auf identischen Speicherplatz verweisen würden, • Probleme bei der Speicherfreigabe zu erwarten sind. str1 MyString str1("Hallo");MyString str2 = str1; ? lLength szBuffer Hallo\0 str2 lLength szBuffer Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  43. Kopierkonstruktoren für dynamische Elemente •  Kopierkonstruktor für Klassen muss dynamische Elemente selbst definieren. •  Kopiervorgang muss nicht die Zeiger, sondern die Datenelemente kopieren! Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  44. Standard-Zuweisung • Standard-Zuweisung neben Default-Konstruktor, Kopierkonstruktor und Destruktor implizit definierte Standard-Methode. • Zuweisung erfolgt datenelementweise auf existierendes Objekt, • Kann mehrfach vorgenommen werden. • Aufrufbeispiel:class CGeoPoint p20, p21;p21 = 20 = p2; Beispiel: -> Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  45. Standard-Zuweisung: Syntax • Syntax:Objektklasse operator=( const Objektklasse & Muster ){ … } • Aufrufbeispiel:class CGeoPoint p20, p21;p21 = 20 = p2; • Ansatz: Überladen des Operators =. • Die Aktionen, die bei der Zuweisung ausgeführt werden sollen, sind durch eine Methode mit Namen operator=() festgelegt. • Eine Zuweisung s1 = s2 entspricht somit dem Aufruf dieser Methode:s1.operator=(s2); • Der Parameter von operator=() ist eine Referenz auf das Objekt, das auf der rechten Seite der Zuweisung steht. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  46. Standard-Zuweisung: Beispiel Datentyp: Referenz auf CGeoPoint CGeoPoint operator=( const CGeoPoint & OtherObject) { cout << "Standardzuweisung (" << OtherObject.szId << ")" <<endl; strcpy(szId,OtherObject.szId); dftEasting = OtherObject.dftEasting; dftNorthing = OtherObject.dftNorthing; return *this;} Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  47. Standard-Zuweisung: Problem • Problem: Einfache Zuweisung nicht ausreichend, wenn eine Klasse dynamische Objekte enthält. Standardzuweisung für Klassen mit dynamischen Elementen selbst definieren. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  48. Standard-Zuweisung für dynamische Elemente MyString MyString::operator=(const MyString & MySourceString){ if ( this != &MySourceString) // falls keine Selbstzuweisung { lLength = MySourceString.lLength; delete [ ] pszBuffer; pszBuffer = new char(lLength + 1); // einschl. Platz für Null-Terminator strcpy(pszBuffer,MySourceString.pszBuffer); } return *this; } Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  49. Destruktor • Aufgabe: "Abbau" ordnungsgemäß aufgebauter Objekte, wie z.B. • Speicherplatzfreigabe • Andere Aufgaben, wie z.B. Schließen von Dateien, ... • Destruktor zerstört die Datenelemente von Objekten in umgekehrter Reihenfolge, wie sie aufgebaut wurden. Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

  50. Definition eines Destruktors • Definition:Klassenname::~Klassenname() { } • Aufruf: • Bei Ende eines Blocks für alle lokal deklarierten Objekte, die nicht zur Speicherklasse static gehören • Bei allen sonstigen Objekten (global oder static definiert) am Programmende. CGeoPoint::~CGeoPoint() // Destruktor{ cout << "Destruktor aufgerufen für Punkt " << szId <<endl;} Hochschule für Technik, StuttgartProf. Dr.-Ing. Franz-Josef Behr SS 2003

More Related