Pods und Objects (class und struct)

Größe: px
Ab Seite anzeigen:

Download "Pods und Objects (class und struct)"

Transkript

1 Grundbegriffe: Pods und Objects (class und struct) Pod = Plain Old Data: Es handelt sich dabei hauptsächlich um die schon in C eingebauten Datentypen wie z.b. Ganzzahltypen: char, short, int, long, long long (auch unsigned) Gleitkommatypen: float, double, long double bool alle Pointer C-Arrays von solchen Typen struct und class-typen, die nur Pod-Attribute enthalten und weder Konstruktoren, Destruktor oder Zuweisungsoperatoren haben Definiert man Variablen (Instanzen) von diesem Typ, erfolgt kein automatischer Aufruf einer Funktion. Lokale Pod-Variablen werden nicht implizit initialisiert (d.h. sie haben nach der Definition einen zufälligen Wert, sofern sie nicht explizit initialisiert werden) : int x; int y = 1; // x hat hier einen undefinierten Startwert // y wird hier explizit auf 1 initialisiert Werden Pods gelöscht (z.b. lokale Variablen beim Verlassen dieser Funktion), erfolgt ebenfalls kein automatischer Aufruf einer Funktion. Objekttypen = Mittels class oder struct definierte Datentypen, die sowohl Daten- Attribute als auch Funktionen (= Methoden) haben können. Ein Objekt ist kein Pod, wenn wenigstens ein Datenattribut kein Pod ist oder aber ein Konstruktor, Destruktor oder Zuweisungsoperator definiert ist. Definiert man Variablen von diesem Typ (man "instanziert" die Objekttypen), werden IMMER spezielle Funktionen aufgerufen (die Konstruktoren, constructors, oft kurz ctor genannt). Werden solche Variablen vernichtet, werden ebenfalls IMMER Funktionen aufgerufen (Destruktor, destructor oft kurz dtor genannt). Klasse und Struktur (class and struct) Implementiert man in C++ einen etwas komplexeren Datentyp, wählt man dafür zumeist eine Klasse (class), seltener eine Struktur (struct). Beide Varianten unterscheiden sich nur in der Voreinstellung der Zugriffsrechte (class: private, struct: public) class MyClass { // die Bestandteile der Klasse, default private:

2 }; // der Strichpunkt ist Wichtig!!!! struct MyStruct { // die Bestandteile der Struktur, default public: }; // der Strichpunkt ist Wichtig!!!! Bestandteile der Objekttypen können sein (nicht vollständig): Datenobjekte, sog. Attribute: z.b. int x, y; Es spielt keine Rolle, wie komplex die Attribute sind. Auch Instanzen anderer Klassen oder Arrays davon sind selbstverständlich möglich. Funktionsdeklarationen (= Klassenfunktionen = Methoden), z.b. int func1(int); // mit Strichpunkt am Ende inline-funktionsdefinitionen: d.h. inclusive Code der Methode int func1(int a) { return a+1; } // kein Strichpunkt am Ende nach } friend-funktionsdeklarationen: z.b. friend double f(double); friend-funktionsdefinitionen: definiert auch den Code dieser Funktion friend double f(double x) {...; return...} friend-klassen: z.b. friend class AnotherClass; (macht alle Methoden von AnotherClass zu friend-funktionen). Typdeklarationen mittels typedef oder using (diese gelten dann nur innerhalb dieser Objekttypen) Auf die Bestandteile des Objekts wird wie bei C-Strukturen zugegriffen: MyClass c; c.x = 1; c.func1(5); // Eine Objekt-Instanz // das Objekt c hat das Attribut x // das Objekt c hat die Methode func1(), // diese wird mit Argument 5 aufgerufen Zusätzlich kann/soll man noch den Zugriffsschutz der Objekt-Bestandteile explizit definieren. Alles nach public: in der Objektdefinition darf im gesamten Programm verwendet werden. Alles nach private: darf nur in den Objektmethoden und in friend-funktionen verwendet werden. Alles nach protected: darf nur in den Objektmethoden, in friend-funktionen und zusätzlich auch in Methoden der abgeleiteten Objekte verwendet werden (Vererbung!). Diese 3 Labels können in beliebiger Reihenfolge

3 und Anzahl in der Objektdefinition aufscheinen. Normalerweise verwendet man aber jedes Label höchstens einmal. Die oft empfohlene Reihenfolge ist public: vor protected: (dieses fehlt zumeist ganz) und private: Der Konstruktor, constructor, ctor: Konstruktoren sind Methoden, die gleich wie der Objekttyp heißen. Eine Klasse kann beliebig viele Konstruktoren besitzen, wenn diese sich in der Argumentliste unterscheiden (Überladen von Funktionen). Konstruktoren haben KEINEN Rückgabetyp (kein void!!!). Ein Konstruktor, der ohne Argumente aufrufbar ist, heißt "Standardkonstruktor" oder "default constructor". Er hat keine Argumente oder alle seine Argumente besitzen Defaultwerte. Konstruktoren werden eigentlich NIE explizit aufgerufen, ihr Aufruf erfolgt bei jeder Instanzierung von Objekten (= man definiert Variablen von diesem Objekttyp). Bei jeder Definition einer Objektinstanz wird ein Konstruktor aufgerufen, es handelt sich daher IMMER um ausführbaren Code. Es gibt mehrere zulässige Schreibweisen: Komplexe_Zahl z; Komplexe_Zahl z{}; -> Komplexe_Zahl() (= Default-K.) Komplexe_Zahl z(1.) Komplexe_Zahl z = 1. Komplexe_Zahl z{1.} Komplexe_Zahl z = {1.} -> Komplexe_Zahl(1.) Komplexe_Zahl z(1., 2.0) Komplexe_Zahl z{1., 2.} Komplexe_Zahl z = {1., 2.} -> Komplexe_Zahl(1., 2.) Komplexe_Zahl z{1., 2., 3.} -> Komplexe_Zahl(1., 2., 3.) 1) Auch Konstruktoren können public oder private oder protected sein. 2) Alle benötigten (= verwendeten) Konstruktoren müssen für das Objekt auch definiert sein, sonst is das ein Fehler. 3) Die von C++ empfohlene Aufrufart von Konstruktoren ist seit C++11 jene mit {}, die aber inkompatibel zu älteren Compilern ist. Bei STL-Containern ist der Aufruf mittels ( ) verschieden vom Aufruf mit { }. 4) Bei allen Konstruktoren (aber nur bei diesen) sind Initialisierungslisten für die Objektattribute zulässig und empfohlen. Mit diesen kann man Konstruktor-Aufrufe für die Attribute festlegen. Die Reihenfolge muss der Objektdefinition entsprechen.

4 Ein hier fehlendes Attribut (das selbst Objekt ist) wird mit seinem default constructor initialisiert. Ist in einem Objekttyp (class oder struct ist egal, aber es darf kein Pod sein!) kein Konstruktor definiert und es wird ein default constructor benötigt, fügt C++ zur Klasse einen trivialen public default constructor hinzu, dessen Code nur aus {} besteht. Schreibt man selbst einen Konstruktor für das Objekt, fügt C++ diesen Default Konstruktor nicht mehr automatisch dazu. Man kann diesen (wenn man will) selbst schreiben oder C++ auffordern, ihn trotzdem zu erzeugen: Komplexe_Zahl() = default; // Bitte liebes C++, generiere diesen D.K. Ein sinnvollerdefault- Konstruktor für komplexe Zahlen, der alle Fälle abdeckt, wäre Komplexe_Zahl(double x = 0., double y = 0.) : re{x}, im{y} // Initialisierungs-Liste, Konstruiere re aus x, im aus y {} // nichts mehr zu tun Komplexe_Zahl z; // z = 0 + 0*i Komplexe_Zahl z{1.}; // z = *i Komplexe_Zahl z{1., 2.} // z = *i Beachte, dass nach der Definition dieses neuen Konstruktors obige Objektdefinitionen immer Konstruktoraufrufe sind und nicht mehr Initialisierungen der struct-attribute. Der Kopier-Konstruktor (copy constructor) Der Kopierkonstruktor ist ein Konstruktor, der ein Objekt als Kopie eines anderen Objekts vom gleichen Typ initialisiert. Es gibt im Wesentlichen nur folgende erlaubte Signaturen: Komplexe_Zahl(const Komplexe_Zahl& original) // Übergabe per konstanter Referenz Komplexe_Zahl(Komplexe_Zahl& original) // Übergabe per Referenz Besitzt eine Klasse keinen Kopierkonstruktor und es wird einer benötigt, fügt C++ einen einfachen public: Kopierkonstruktor hinzu, der alle Teile des Originals kopiert (d.h. deren Kopierkonstruktoren aufruft). Eine (hier unnötige) Implementierung wäre: Komplexe_Zahl(const Komplexe_Zahl& original) : re{original.re}, im{original.im} {}

5 Aufrufe des Kopierkonstruktors: Komplexe_Zahl original{1., 2.}; Komplexe_Zahl z1(original); Komplexe_Zahl z2{original}; Komplexe_Zahl z3 = original; Komplexe_Zahl z3 = {original}; // definiere das original // prä-c++11 // C++11 // das ist keine Zuweisung!!!! // C++11 Der Zuweisungsoperator, copy-assignment operator (operator=) Der Zuweisungsoperator wird verwendet, um einer Instanz den Inhalt einer anderen zuzuweisen. Ein =-Zeichen in einer Definition ist KEINE Zuweisung sondern eine alternative Schreibweise für einen Konstruktor. Es gibt 2 erlaubte Signaturen (rhs steht für "right hand side"): Komplexe_Zahl& operator=(const Komplexe_Zahl& rhs) // Übergabe von rhs per konstanter Referenz Komplexe_Zahl& operator=(komplexe_zahl rhs) // Übergabe von rhs per Wert Da die Zuweisung bei Pods in C/C++ immer den zugewiesenen Wert als Ergebnis des Operators hat, ist das auch bei diesem Objekt-Zuweisungsoperator beizubehalten, d.h. der Rückgabewert ist eine Referenz auf das Referenzobjekt. Damit wäre eine sinnvolle (aber unnötige s.u.) vollständige Implementierung: Komplexe_Zahl& operator=(const Komplexe_Zahl& rhs) { re = rhs.re; im = rhs.im; // kopiere die Attibute return *this; // gib Referenz zurück } Komplexe_Zahl a, b, c; a = b = c = Complex{0, 1}; // setze alle 3 auf i Falls man einen Zuweisungsoperator schreibt, MUSS dieser auch bei Zuweisungen an sich selbst funktionieren, d.h. ein Statement wie z = z; darf nicht zu einem Fehler führen. Complex z1 = 5, z2 = z1; // entspricht z1{5}, z2{z1} KEINE Zuweisung z1 = z2; // Zuweisungsoperator Besitzt eine Klasse keinen Zuweisungsoperator und es wird einer benötigt, fügt C++ einen einfachen public: Zuweisungsoperator hinzu, der alle Teile des Originals an jene des Ziels zuweist.

6 Seit C++11 heißt dieser Zuweisungsoperator übrigens copy assignment operator, da es ab dann auch einen move assignment operator gibt/geben kann. Der Destruktor, destructor, dtor Er hat immer den Namen ~Objekttypname(), es darf nirgends void stehen. Deshalb kann es auch nur einen einzigen Destruktor pro Objekttyp geben. Er wird fast NIE explizit aufgerufen sondern wird von C++ vollautomatisch aufgerufen, falls eine Instanz vernichtet wird (lokale Objekte beim Ende des Blocks in { }, globale Objekte am Programmende nach main()). Sehr häufig macht man sich diese Automatik-Funktion zunutze, um automagisch Funktionen ohne expliziten Aufruf einzusetzen (z.b. std::lock_guard sperrt das Schloss auf, std::unique_ptr zerstört seinen Inhalt, std::fstream schließt sich vollautomatisch). Besitzt eine Klasse keinen Destruktor und es wird einer benötigt, fügt C++ einen einfachen public: Destruktor hinzu, der nur aus {} besteht. Der move constructor (C++11) Seit C++11 kann ein Objekttyp auch einen solchen Konstruktor besitzen, der eine Instanz als Kopie eines temporären Originals erstellt und dabei dessen Ressourcen "klaut", wann immer das möglich ist. Alle STL-Containerklassen besitzen einen solchen Konstruktor, ebenso die std::string Klasse. Dieser Konstruktor ist nur dann wirklich sinnvoll, wenn die Klassen über dynamische Inhalte verfügen, die vom Original zum Ziel verschoben werden können (deshalb: move). Obwohl das bei der Klasse Komplexe_Zahl nicht zutrifft, könnte man ihn trotzdem definieren: Komplexe_Zahl(Komplexe_Zahl&& temp) : re{temp.re}, im{temp.im} {} // Übergabe per rvalue-referenz Komplexe_Zahl z1{1, 2}; Komplexe_Zahl z2{sin(z1)}; // sin(z1) ist eine temporäre Komplexe_Zahl -Instanz Besitzt eine Klasse keinen move-constructor und es könnte einer eingesetzt werden, so fügt C++ unter bestimmten Voraussetzungen einen einfachen public: move constructor hinzu.

7 Der move assignment operator (C++11) Dieser Zuweisungsoperator wird verwendet, um einer Instanz den Inhalt einer temporären anderen zuzuweisen und dabei deren Ressourcen zu "klauen". Obwohl er für die Klasse Komplexe_Zahl keine Vorteile bietet, könnte man ihn wie folgt programmieren: Komplexe_Zahl& operator=(komplexe_zahl&& temp) { re = temp.re; im = temp.im; // kopiere die Attibute (keine Init-Liste!) return *this; // gib Referenz zurück } Komplexe_Zahl z1{1,2}, z2; z2 = sin(z1); // die rechte Seite ist ein temporary (rvalue) Besitzt eine Klasse keinen move assignment operator und es könnte einer eingesetzt werden, so fügt C++ unter bestimmten Voraussetzungen einen einfachen public: move assignment operator hinzu. Die Übergabe des Referenzobjekts Bei jedem expliziten oder impliziten Methodenaufruf gibt es eine Referenzinstanz: Komplexe_Zahl z{1}; // implizit: Aufruf von z.complex(1), z ist die Referenzinstanz z.abs(); // explizit: z die Referenzinstanz Die Referenzinstanz taucht nie in der Argumentliste der Methoden auf und wird auch NIE deklariert. Innerhalb jeder nichtstatischen Klassenmethode (nicht aber in friend- Funktionen) gibt es den Pointer this,der auf die Referenzinstanz zeigt. In den meisten Fällen darf man bei Zugriffen auf die Attribute oder Methoden des Referenzobjekts das this-> weglassen. Bei den komplexen Zahlen steht z.b. im Konstruktor einfach Komplexe_Zahl(double r = 0, double i = 0): re{r}, im{i} {} statt: Komplexe_Zahl(double r = 0, double i = 0) : this->re{r}, this->im{i} {}

8 const, aber richtig Es ist guter Stil in C++ (und manchmal auch Pflicht), alle Argumente, die per Pointer oder Referenz übergeben werden und die innerhalb einer Funktion nicht verändert werden (auch nicht auf dem Umweg über weitere Funktionen!) mit dem Zusatz const zu versehen. Wird die Referenzinstanz durch eine Methode nicht verändert, so nennt man diese eine konstante Methode und man schreibt das const nach die schließende Klammer ) vor dem ; oder { void print() const; // gib die komplexe Zahl (die Referenzinstanz) aus, diese bleibt dabei unverändert. C++ beachtet diese Zusätze genauestens. Unterscheidet sich die Funktionsdefinition auch nur in einem const-zusatz, ist es eine andere Funktion: void print() {} // eine andere Print-Funktion oder Methode Man kann Klassenattribute mit dem Schlüsselwort mutable kennzeichnen. Dann zählt eine Veränderung dieser Attribute nicht als Veränderung der Klasseninstanz und ist somit auch in konstanten Methoden erlaubt. Destruktoren, Konstruktoren und Initialisierungslisten, Typ-Umwandlung Jeder Konstruktor und Destruktor (auch wenn der Code nur{} ist) führt vollautomatisch weitere Dinge aus: Konstruktor: VOR dem eigenen Code (also vor den Statements zwischen { und }) ruft der Konstruktor für alle Basis-Objekttypen, von denen geerbt wurde, und für alle Attribute der Klasse, die selbst Objekte (keine Pods) sind, deren Standardkonstruktor auf, falls keine Initialisierungsliste vorhanden ist. Falls diese Teile selbst wieder Attribute besitzen, werden auch diese konstruiert usw. Gibt es eine Initialisierungsliste, wird anstelle des Standardkonstruktors der dort angegebene Konstruktor aufgerufen. Fehlen Attribute in der Initialisierungsliste, die selbst Objekte sind, so werden diese mit deren Default-Konstruktor erzeugt. Fehlen Attribute in der Initialisierungsliste, die Pods sind, so werden diese nicht initialisiert. Man kann diese jedoch alternativ mittels Zuweisungen im Programmteil des Konstruktors auf vernünftige Anfangswerte setzen. Destruktor: Nach dem eigenen Code ruft der Destruktor auch die Destruktoren aller Attribute, die selbst Objekte sind, und der Basis-Objekte, falls es welche gibt, auf.

9 Initialisierungsliste: Diese steht (bei allen Konstruktoren und nur bei diesen) optional zwischen den Funktionsklammern ( ) und dem Code { }. Nach einem Doppelpunkt folgen die Konstruktoraufrufe von einigen oder allen Basisklassen und Attributen. So kann man selbst festlegen, mit welchem Konstruktor die Attribute erzeugt werden. Eine Initialisierungsliste ist Pflicht, falls wenigstens eine Basisklasse oder ein Attribut, das Objekt ist, keinen Standardkonstruktor besitzt; falls ein konstantes Attribut initialisiert werden muss; wenn ein Attribut eine Referenz ist. Darüber hinaus ist es oft effizienter, den Konstruktor selbst auszuwählen. Die Reihenfolge der Konstruktoraufrufe MUSS der Reihenfolge in der Objekt-Definition entsprechen (sonst gibt es Compiler-Warnungen): korrekt: Komplexe_Zahl(double r = 0, double i = 0): re{r}, im{i} {} falsche Reihenfolge: Komplexe_Zahl(double r = 0, double i = 0): im{i}, re{r} { } Seit C++11 darf eine Initialisierungsliste auch einen anderen Konstruktor derselben Klasse aufrufen (constructor delegation). Eine nicht sehr elegante Version hier: Komplexe_Zahl(double r, double i) : Komplexe_Zahl{r} // verwendet diesen ctor { im = i; } // und setzt nur noch den Imaginärteil Typ-Umwandlung durch Konstruktor: Konstruktoren, die mit genau einem Argument eines anderen Typs aufgerufen werden können, werden von C++ auch als Typumwandlungs- Funktionen verwendet. Im obigen Fall würde der Konstruktor Komplexe_Zahl(double r) (ruft Komplexe_Zahl(r, 0.) auf) auch als Umwandlungsfunktion von double in Komplexe_Zahl verwendet werden, was mathematisch sogar Sinn macht. Also wird man diese Zusatzfunktion dort wohl beibehalten. Bei den Brüchen ist die Umwandlung von Integern bei Bedarf in Brüche mit Nenner 1 ebenfalls sinnvoll. Bei den 2d- Vektoren will man jedoch Skalare auf keinen Fall in Vektoren umwandeln: Will man einen Konstruktor NICHT als Umwandlungsfunktion einsetzen, schreibt man vor ihn das Schlüsselwort explicit: Komplexe_Zahl(double = 0., double = 0.) ist auch Typumwandlung explicit Komplexe_Zahl(double = 0., double = 0.) ist keine.

10 Die Regel der großen Drei Das ist eine Faustregel in C++, die fast immer stimmt. Die großen Drei sind der Destruktor, der Copy-Konstruktor und der Kopier-Zuweisungsoperator operator=. Alle 3 werden von C++ u.u. automatisch erzeugt, wenn der Programmierer diese Methoden nicht selbst programmiert hat. Die Regel lautet: Benötigt eine Klasse unbedingt eine selbstgeschriebene Version von EINEM der großen Drei, benötigt sie ziemlich sicher selbstgeschriebene Versionen von ALLEN 3. Der Grundsatz gilt natürlich nicht, wenn man z.b. den Destruktor nur für Debugging-Zwecke geschrieben hat, damit er Log-Einträge erzeugt.

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Objekte wie Hund und Katz

Objekte wie Hund und Katz Objekte wie Hund und Katz Wir wollen den Titel wörtlich nehmen und Hunde sowie Katzen als neue C++ Objekte (= eigener Datentyp) definieren. Dazu gibt es in C die Struktur (struct), in C++ zusätzlich die

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ - Objektorientierte Programmierung Konstante und statische Elemente C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja

Mehr

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren in C++ Überladen von Methoden und Operatoren Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse

Mehr

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen

Mehr

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11 C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

7. Übung Informatik II - Objektorientierte Programmierung

7. Übung Informatik II - Objektorientierte Programmierung 7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Objektorientierung in C++ (2) Beziehungen zwischen Klassen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 530 Beziehungen zwischen Klassen Assoziation

Mehr

Klassen als Datenstrukturen

Klassen als Datenstrukturen Einstieg in die Informatik mit Java, Vorlesung vom 27.11.07 Übersicht 1 Klassen als Datenstruktur 2 Vereinbarung von Klassen 3 Erzeugen von Objekten - Instanzen einer Klasse 4 Zugriff auf Attribute 5 Initialisierung

Mehr

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Vorkurs Informatik WS 14/15 Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Tag 3: Objektorientiere Programmierung 8. Oktober 2014 Vorkurs Informatik WS 14/15 > Einführung Agenda 1 Einführung

Mehr

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren Themen Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren Statische Methoden Klassenmethoden Merkmal der Klasse nicht eines einzelnen Objekts

Mehr

11 Vererbung und Klassenhierarchie

11 Vererbung und Klassenhierarchie 11 Vererbung und Klassenhierarchie Bestandteile objektorientierter Programmierung: Bestehende Klassen können durch Spezialisierung und Erweiterung weiterentwickelt werden, ohne den Programmcode der alten

Mehr

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2 HSR Rapperswil 2001 Markus Rigling Programmieren: Vererbung 1 Variante 2 Inhaltsverzeichnis: 1. Was ist Vererbung...3 2. Anwendung...3 3. Realisierung...3 4. Vorgehensweise zur Erstellung einer Kind-Klasse...3

Mehr

C++ - Objektorientierte Programmierung Vererbung

C++ - Objektorientierte Programmierung Vererbung C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.

Mehr

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine

Mehr

Programmierkurs C/C++

Programmierkurs C/C++ Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Donnerstag Sandro Andreotti [email protected] WS 2008/09 1 Structs Blockkurs: "Einführung in C/C++" 2 Structs sind Bündel von Variablen (unter

Mehr

Polymorphismus 179. Function.h. #include <string>

Polymorphismus 179. Function.h. #include <string> Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 24 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 24 1 Klassen als Datenstruktur 2 Vereinbarung von

Mehr

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp 03.05.2017 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Knopp 03.05.2017 IDE Integrated Development Environment Wir empfehlen: Qt Creator (Bestandteil

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17 C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/35 GK C++: IDE, Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 IDE Integrated Development Environment

Mehr

Überblick. 5. Objekt und Klasse, Elementfunktionen

Überblick. 5. Objekt und Klasse, Elementfunktionen Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

Mehr

Aufbau von Klassen. class punkt {...

Aufbau von Klassen. class punkt {... Einführung in C++ Aufbau von Klassen Eine wird mit dem Schlüsselwort class eingeleitet, und endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben. class punkt {... ; Im

Mehr

Meeting C++ C++11 R-Value Referenzen

Meeting C++ C++11 R-Value Referenzen Meeting C++ Detlef Wilkening http://www.wilkening-online.de 09.11.2012 Inhalt Motivation L-Values und R-Values R-Value Referenzen Move Semantik std::move Funktionen mit R-Value-Referenz Parametern Fazit

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen C-Pointer (Zeiger, Adressen) vs. C++ Referenzen Der Pointer (C/C++): In C/C++ ist der Pointer ein eigener Datentyp, der auf Variablen/Objekte zeigen kann. Indem man den Pointer dereferenziert, gewinnt

Mehr

C++-Zusammenfassung. H. Schaudt. August 18, 2005

C++-Zusammenfassung. H. Schaudt. August 18, 2005 C++-Zusammenfassung H. Schaudt August 18, 2005 1 Datentypen 1.1 Grunddatentypen int (-32xxx bis +32xxx, implementerungs-abhängig) char -128 bis +128 float double bool (C++) int und char sind austauschbar:

Mehr

Vererbung und Polymorphie

Vererbung und Polymorphie Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren

Mehr

Vokabeln. 4.1 Benutzer definierte Datentypen. Kapitel 4. Prof. Dr. Gerhard Berendt C++ oop? SS 2002 Arbeitsblatt 4

Vokabeln. 4.1 Benutzer definierte Datentypen. Kapitel 4. Prof. Dr. Gerhard Berendt C++ oop? SS 2002 Arbeitsblatt 4 4.1 Benutzer definierte Datentypen C++ unterstützt die Einführung benutzer definierter Datentypen (auch Abstrakte Datentypen (ADT) genannt). ADTs bieten einen guten Einstieg in das Paradigma der objekt

Mehr

1.4. Funktionen. Objektorientierte Programmierung mit C++

1.4. Funktionen. Objektorientierte Programmierung mit C++ mehrfache Deklarationen sind erlaubt für jede Funktion muss es (GENAU) eine Definition geben, ansonsten linker error [the one definition rule ODR] Deklarationen in *.h - Files, Definitionen in *.cpp -

Mehr

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

Mehr

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen 1 Thema heute: Vererbung und Klassenhierarchien Abgeleitete Klassen Vererbung von Daten und Funktionen Virtuelle Funktionen 2 Vererbung oft besitzen verschiedene Datentypen einen gemeinsamen Kern Beispiel:

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Arrays. Einleitung. Deklarieren einer Array Variablen

Arrays. Einleitung. Deklarieren einer Array Variablen Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte entstehen durch... globale Objektvereinbarung: T o; blocklokale Objektvereinbarung: {.. T o;.. durch expliziten Aufruf

Mehr

Programmieren in Java

Programmieren in Java Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware

Mehr

Elementare Datentypen in C++

Elementare Datentypen in C++ Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der

Mehr

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen Objektorientierte Programmierung mit Grundlagen 27.10.2008 1 Übersicht 27.10.2008 2 1 Übersicht Klassen und Objekte in - Klassen - Objekte - Klassen - Objekte 27.10.2008 3 Übersicht 27.10.2008 4 2 Einführung

Mehr

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ziele Sie wissen, was Vererbung

Mehr

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

Praxisorientierte Einführung in C++ Lektion: "Das Schlüsselwort explicit"

Praxisorientierte Einführung in C++ Lektion: Das Schlüsselwort explicit Praxisorientierte Einführung in C++ Lektion: "Das Schlüsselwort explicit" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ April

Mehr

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]

Mehr

Crashkurs C++ Wiederholung

Crashkurs C++ Wiederholung Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i

Mehr

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg Klassen und Objekte Einführung in Java Folie 1 von 28 12. Mai 2011 Ivo Kronenberg Inhalt Objekte Klassendefinitionen Datenelemente (Klassenattribute) Instanzieren von Objekten Konstruktoren Vergleich primitive

Mehr

11.3 Virtuelle Methoden

11.3 Virtuelle Methoden 11.3 Virtuelle Methoden Überdeckte Methoden: Betrachten wir noch einmal unsere Klassen Employee und Manager. class Employee void print() const cout

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Christian-Albrechts-Universität zu Kiel CAU 8-1 Objektorientiertes Programmieren Die Programme, die bisher in diesem Kurs verwendet wurden, sind alle klein und überschaubar

Mehr

6 ZEIGER UND REFERENZEN - ALLGEMEINES

6 ZEIGER UND REFERENZEN - ALLGEMEINES 6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

OOP und Angewandte Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

OOP und Angewandte Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Klassen in C++ Beispiele, mit Aufzeigen der Trennung von Spezifikation und Implementierung

Mehr

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5. Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1

Mehr

Dynamische Datentypen

Dynamische Datentypen Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:

Mehr

Vererbung, Polymorphie

Vererbung, Polymorphie Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 5 12.04.2017 Was bisher geschah... Objektorientierte Programmierung Klassen und Objekte, Attribute

Mehr

Programmieren in C++ Templates

Programmieren in C++ Templates Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Konstruktor/Destruktor

Konstruktor/Destruktor 1/23 Konstruktor/Destruktor Florian Adamsky, B. Sc. (PhD cand.) [email protected] http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/23 Outline 1 2 3/23 Inhaltsverzeichnis 1 2

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen

Mehr

Systemnahe Programmierung in C/C++

Systemnahe Programmierung in C/C++ Systemnahe Programmierung in C/C++ Peter Piehler [email protected] Lehrstuhl für Datenbanken und Informationssysteme Fakultät für Mathematik und Informatik 2006 12 13 Peter Piehler (DBIS) C/C++

Mehr

Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt.

Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt. Templates Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt. Bsp.: einfach verkettete Liste Data Data Data Data Jeder Datenknoten nimmt ein Datenobjekt

Mehr

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich

Mehr

Lösung der OOP-Prüfung WS12/13

Lösung der OOP-Prüfung WS12/13 2.1.2013 Lösung der OOP-Prüfung WS12/13 1. Aufgabe a) Da der Konstruktor im protected-bereich steht, können keine eigenständigen Objekte der Klasse angelegt werden. Durch den protected-konstruktor wird

Mehr

Objektorientierung (OO)

Objektorientierung (OO) Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members

Mehr

Felder, Zeiger und Adreßrechnung

Felder, Zeiger und Adreßrechnung Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche

Mehr

Java Vererbung. Inhalt

Java Vererbung. Inhalt Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch

Mehr