7 Vererbung. Modul Programmieren mit C++ Kapitel Vererbung

Größe: px
Ab Seite anzeigen:

Download "7 Vererbung. Modul Programmieren mit C++ Kapitel Vererbung"

Transkript

1 7.1 7 Vererbung Eine von der Basisklasse B abgeleitete Klasse A erbt alle Attribute und Methoden von B. Ein Objekt der Klasse A besitzt ein Slice der Klasse B und ein Slice der Klasse A. Jeder Konstruktor der Klasse A muss alle neuen Attribute seiner Klasse initialisieren. Die Initialisierung der ererbten Attribute wird an einen Konstruktor der Basisklasse B delegiert. Konstruktor Das Slice der Basisklasse muss vor dem Slice der abgeleiteten Klasse initialisiert werden. Dies geschieht in der Initialisierungsliste des Konstruktors mit einem Aufruf eines Basisklassen-Konstruktors. In der Initialisierungsliste können keine Attribute der Basisklasse direkt initialisiert werden, da hierfür die Zugriffsrechte fehlen. Falls kein Konstruktor in der Initialisierungsliste angegeben wird, versucht C++, den Default-Konstruktor zu verwenden. Neue Attribute können auch in der Initialisierungsliste initialisiert werden. Erben von Konstruktoren (neu in C++ 11): Bisher konnte eine Klasse keine Konstruktoren ihrer Basisklasse erben. In der abgeleiteten Klasse standen nur die Konstruktoren zur Verfügung, welche explizit für diese Klasse definiert wurden (mit Ausnahme der automatisch vom Compiler generierten Konstruktoren). Seit C++ 11 ist es möglich, alle (und nur alle auf einmal) Konstruktoren der Basisklasse zu erben. Beispiel: class Student : Person{ int m_matrikelnummer = 0; using Person::Person; Student(const string& name, const string& vorname, int matrikel) : Person{name, vorname, m_matrikelnummer{matrikel{ using Person::Person führt dazu, dass alle Konstruktoren von Person geerbt werden. Die Initialisierung der Matrikelnummer bei der Deklaration ist wichtig, falls der geerbte Konstruktor von Person aufgerufen wird, also der Konstruktor, welcher nur 2 Parameter entgegennimmt. Destruktor Der Destruktor einer abgeleiteten Klasse löscht alle eigenen dynamischen Attribute des Objekts. Am Schluss werden die ererbten Attribute gelöscht. Dies wird an den Basisklassen-Destruktor delegiert, indem er automatisch aufgerufen wird. Für eine abgeleitete Klasse muss nur ein Destruktor programmiert werden, wenn sie entweder dynamische Attribute enthält oder aber Klassenattribute, die beispielsweise Instanzen zählen. Der Destruktor wird immer auch für statisch (auf dem Stack) erzeugte Objekte aufgerufen, bevor sie vom Stack entfernt werden. Destruktoren von Klassen, von welchen weitere Ableitungen oder polymorphe Nutzung zu erwarten sind, soll der Destruktor virtuell deklariert werden. Damit ist sichergestellt, dass immer der richtige Destruktor aufgerufen wird.

2 7.2 Ein Beispiel // Deklaration der Basisklasse class Person { string m_nachname; string m_vorname; Person(const string& vorname, const string& name); void setnachname(const string& nachname) { m_nachname = nachname; void setvorname(const string& vorname) { m_vorname = vorname; void print() const; // Implementation fehlender Methoden in der Basisklasse void Person::print() const { cout << "Nachname: " << m_nachname << endl; cout << "Vorname: " << m_vorname << endl; Person::Person(const string& v, const string& n): m_vorname{v, m_nachname{n{ Von der Klasse Person wird die Klasse Student abgeleitet. Sie enthält die Matrikelnummer als neues, zusätzliches Attribut: // Deklaration der abgeleiteten Klasse Student class Student : Person{ int m_matrikelnummer; Student(const string& vorname, const string& name, int matrikel); void setmatrikelnummer(int nr) { m_matrikelnummer = nr; void print() const; // Implementation der abgeleiteten Klasse Student Student::Student(const string& v, const string& n, int m):person{v,n, m_matrikelnummer{m{ void Student::print() const { Person::print(); cout << "Matrikelnummer: " << m_matrikelnummer << endl; Zeiger und Referenzen Ähnlich, wie es auch in Java zulässig ist, an eine Referenz ein typenfremdes Objekt anzuhängen, dürfen Sie in C++ an einen Zeiger oder eine Referenz ein Objekt zuweisen, welches einen fremden Typ aufweist. In den folgenden Punkten sind die dafür gültigen Regeln beschrieben: Das einem Zeiger oder einer Referenz zugewiesene Objekt gehört zu einer Klasse, die vom Zieltyp der Referenz oder des Zeigers abgeleitet ist. In einem solchen Fall darf das Objekt ohne explizite Typkonvertierung an die Referenz bzw. den Zeiger zugewiesen werden. Der Compiler führt einen impliziten Up-Cast durch. Beispiel: Person* p = new Student{"Daniel", "Meier", Einem Zeiger oder einer Referenz des Zieltyps A darf kein Objekt einer Basisklasse von A zugewiesen werden. Eine solche Zuweisung ist allerdings erlaubt, sofern die Quelle der Zuweisung selbst ein Zeiger bzw. eine Referenz ist und das Objekt, das sich dahinter versteckt, aus der Klasse A oder einer von A abgeleiteten Klasse stammt. Sie hat aber immer durch eine explizite Konversion (Down-Cast) zu erfolgen. Beispiele:

3 7.3 Student* s1 = new Student{... Person* p = s1; // erlaubt: impliziter Up-Cast Student* s2 = p; // verboten, obschon das Objekt eigentlich passt. Student* s2 = static_cast<student*>(p); // erlaubt: expliziter Down-cast Unzulässige Typkonvertierungen haben folgende Auswirkungen: Wird ein traditioneller C-Cast oder static_cast verwendet, kann ein Laufzeitfehler auftreten. Die Benutzung eines dynamic_cast ist eher zu empfehlen: Schlägt die Umwandlung fehl, gibt sie 0 zurück (bei Zeigern) oder wirft eine Ausnahme (bei Referenzen: bad_castexception). Typen-Informationen Um Fehler bei einem Down-Cast zu vermeiden, ist es manchmal nötig, im voraus herauszufinden, ob der Typ eines Objekts passt. Der Operator dynamic_cast nutzt die für jede Klasse vorhandene Typen-Information, um herauszufinden, ob und wie ein korrekter Cast möglich ist. Er wird in Situationen verwendet, in welchen der Compiler nicht in der Lage ist zu entscheiden, ob ein Cast gültig ist. dynamic_cast prüft die Gültigkeit erst zur Laufzeit! Mit dem Operator typeid kann das Typen-Informations-Objekt einer Klasse explizit abgefragt werden: Er gibt die Referenz auf ein solches Objekt zurück. Damit sind genaue Typenprüfungen im voraus möglich (RTTI. Negativer Einfluss auf die Performance. Muss im Visual Studio explizit eingeschaltet werden). Beispiel: #include "typeinfo.h" Person* p = new Person(...); Person* q = new Student(...); const type_info& tp = typeid(*p); const type_info& tq = typeid(*q); if (tp==tq) cout << "Die beiden Typen sind identisch." << endl; if (tp.before(tq)) cout << "tp ist Basisklasse von tq" << endl; Auf type_info Objekten sind folgende Operatoren und Methoden definiert: Die Operatoren == und!=. Die Methoden bool before(const type_info&) zur Ermittlung der Rangfolge in der Vererbungshierarchie und const char* name() zur Ermittlung des Typen-Namens. Tip: Benutzen Sie dynamische Casts bzw. RTTI nur, wenn unbedingt erforderlich. Bevorzugen Sie polymorphe Zugriffe. Polymorphie C++ unterstützt wie Java polymorphe Zugriffe; dies allerdings mit einigen Unterschieden. Beim Aufruf einer Methode über einen Zeiger oder eine Referenz wird die zum Typ des Objekts passende Methode gewählt, sofern für die entsprechende Methode Polymorphie eingeschaltet ist (in Java ist sie standardmässig eingeschaltet und kann mit final ausgeschaltet werden. In C++ ist sie standardmässig ausgeschaltet und kann mit virtual eingeschaltet werden). Person* pp = new Person{... Person* ps = new Student{... pp->print(); ps->print(); // ruft Student::print() auf, falls print() virtuell ist Anstelle eines Objekts der Klasse B kann auch ein Objekt einer von B abgeleiteten Klasse A verwendet werden. Das Objekt der Klasse A ist polymorph: Es kann sich wie ein Objekt der Klasse A oder wie ein Objekt der Klasse B verhalten.

4 7.4 Werden Methoden einer Basisklasse überschrieben, sind sie nur dann polymorph, wenn die Basisklassen- Version als virtuell deklariert wurde. Virtuelle Methoden erfordern einen etwas höheren Aufwand beim Aufruf. Deklarieren Sie Methoden nur dann virtuell, wenn erforderlich! Werden in abgeleiteten Klassen Attribute definiert, deren Name bereits in der Basisklasse existiert, verdeckt das neue Attribut das alte. Vermeiden Sie dies unbedingt. Falls sich doch einmal ein Verdeckungseffekt nicht vermeiden lässt, können Sie durch Qualifikation eindeutig auf beide Attribute zugreifen: class Basis{ : int m_i; class Abgeleitet : Basis{ int m_i; Abgeleitet(int wert) : m_i(wert){ cout << "Attribut der abgeleiteten Klasse: " << m_i << endl; cout << "Attribut der Basisklasse: " << Basis::m_i << endl; cout << "Attribut der Basisklasse: " << static_cast<basis*>(this)->m_i << endl; Methoden überladen Methoden gleichen Namens aber unterschiedlicher Signatur können koexistieren (wie in Java). Manchmal muss man allerdings hinschauen um herauszufinden, welche Methode wirklich aufgerufen wird. Beispiel: Es sei die Klasse Sohn von Vater abgeleitet. void Vater::func(char) void Sohn::func(int) ~~~ Sohn s; s.func(5); // Sohn::func(), da Vater keine passende Überladung anbietet. s.func( A ); // Sohn::func(), da Sohn::func auch für char passt. In unklaren Fällen kann die gewünschte Methode explizit aufgerufen werden: s.vater::func( A ); oder using Vater::f. Methoden überschreiben Die überschreibende Methode muss dieselbe Signatur besitzen wie die überschriebene Methode. Der Rückgabetyp muss so gewählt werden, dass die neue Methode im selben Kontext verwendet werden kann wie die alte. Das heisst: Der Rückgabetyp muss identisch sein, wenn es sich um ein Objekt oder einen primitiven Wert handelt. Wird ein Zeiger oder eine Referenz zurückgegeben, darf das Ziel-Objekt auch vom ursprünglichen Rückgabe- Typ abgeleitet sein (Spezialisierung). Ist die überschriebene Methode nicht virtuell, entscheidet der statische Typ des Objekts bzw. des Zeigers/ Referenz über die Wahl der Version der aufgerufenen Methode. Ist die überschriebenen Methode virtuell und wird sie am Objekt direkt aufgerufen, kommt die im Objekt definierte Methode zu Einsatz (keine Polymorphie). Ist die überschriebenen Methode virtuell und wird sie über einen Zeiger oder eine Referenz aufgerufen, wird der Typ des Objekts dynamisch ermittelt und die passende Methoden-Version aufgerufen. Wenn der Polymorphie-Effekt greifen soll, kann die passende Methode erst zur Laufzeit ermittelt werden. Diesen langsameren Prozess bezeichnet man als dynamische oder späte Bindung. In allen anderen Fällen wird die

5 7.5 schnellere statische oder frühe Bindung verwendet. Hier wird bereits zur Compilierzeit die passende Methode ausgewählt. Wird eine Methode in der Basisklasse als virtual deklariert, sind alle später überschriebenen Versionen automatisch auch virtuell. Destruktoren in Klassen, von welchen abgeleitet werden soll, müssen virtual deklariert werden, damit eine Löschung eines Objekts (von einem Zeiger aus) stets den richtigen Destruktor verwendet. Konstruktoren können nicht virtuell sein (ergibt auch gar keinen Sinn). Private Methoden sollen nicht virtual deklariert werden, da sie von aussen nicht benutzt werden können. In C++ 11 gibt es einige Neuerungen, die zur Verwendung empfohlen werden: Methoden können als überschrieben ausgezeichnet werden. Dies ermöglicht es dem Compiler, Flüchtigkeitsfehler beim Überschreiben zu erkennen (z.b. ein Vertipper beim Namen, welcher ohne Markierung stillschweigend als neue Methode akzeptiert würde). class Person{ virtual void print() {... : class Student : Person{ virtual void print() override { : Person::print(); : Methoden, welche nicht weiter überschrieben werden sollen, können neu als final markiert werden. Zum Beispiel in Student: void print() final override{... Diese Methode wurde hier überschrieben, darf aber nicht in einer abgeleiteten Klasse nochmals überschrieben werden (also kein virtual!). Zugriffsrechte In der Basisklasse deklariert als... Klasse vererbt als... Zugriffsrechte in der abgeleiteten Klasse kein Zugriff (ausser in der Basisklasse als friend deklariert) kein Zugriff (ausser in der Basisklasse als friend deklariert) kein Zugriff (ausser in der Basisklasse als friend deklariert)

6 7.6 Friends Im Abschnitt über Zugriffsrechte haben wir gesehen, wie man den Zugriff auf Elemente einer Klasse einschränken kann. Manchmal wäre es allerdings schön, wenn eine Klasse einer anderen Sonderrechte gewähren könnte, ohne sich aber zugleich auch für alle Welt öffnen zu müssen. Dieser Fall tritt beispielsweise ein, wenn es angezeigt erscheint, einer anderen Klasse aus Gründen der Performance Zugriff auf interne Methoden oder Attribute zu gewähren, ohne dass zwischen den beiden Klassen eine verwandtschaftliche Beziehung besteht. Beispiel: Für die Klassen Matrix und Vector: Multiplikation von Matrizen mit Vektoren. Sonderrechte können auf zwei Arten gewährt werden: Auf der Stufe «Methode»: Einer fremden Methode kann der Zugriff auf eigene Elemente erlaubt werden. Auf der Stufe «Klasse»: Einer anderen Klasse kann der Zugriff auf eigene Elemente erlaubt werden. Beispiele: class A{ // verschiedene Elemente der Klasse A friend B::fb(); // fb() aus der Klasse B darf auf Elemente der Klasse A zugreifen. friend class C; // alle Elemente der Klasse C dürfen auf Elemente von A zugreifen. class B{ int fb(){... class C{ Mehrfach-Vererbung C++ erlaubt Mehrfach-Vererbung. Dieses an sich mächtige Werkzeug kann allerdings auch zu Problemen mit Namenskonflikten und Mehrdeutigkeiten führen: Ein Basisklassen-Slice kann in einem abgeleiteten Objekt mehrfach vorkommen, so dass ein Methoden-Aufruf, welcher dieses Slice benutzt, nicht entscheiden kann, welches er verwenden soll (führt zu einem Compiler-Fehler). Person Mitarbeiter Student Dozent Assistent Hilfsassistent Dieses Problem kann mit Hilfe virtueller Basisklassen behoben werden: Erbt eine abgeleitete Klasse von einer Basisklasse virtuell, stellt der Compiler sicher, dass jedes Slice nur genau einmal in die abgeleitete Klasse eingebaut wird. Es stellt sich allerdings noch die Frage, welcher Basisklassen-Konstruktor im abgeleiteten Konstruktor aufgerufen wird: Dieses Problem wird durch einen expliziten Konstruktor-Aufruf beseitigt.

7 7.7 Person p("daniel", "Meier"); Assistent a(p,...); Student s(p,...); Hilfsassistent h(a, s,...); cout << h.setnachname(); // Compiler-Fehler Hilfsassistent erbt die Methode setnachname() gleich doppelt, einmal via Assistent und einmal via Student. Der Compiler weiss nicht, welche er benutzen soll. Es ist auch nicht garantiert, dass die beiden Person- Slices die selbe Information enthalten. Diese Art von Eindeutigkeitsproblemen können mit virtuellen Basisklassen gelöst werden: class Student : virtual Person{ //... class Mitabeiter : virtual Person{ //... class Assistent : Mitarbeiter{ //... class Hilfsassistent : Student, Assistent{ // eigene Attribute Hilfsassistent(const Student& s, const Assistent& a,...) : Person(...), Assistent(a), Student(s){... Wird eine Basisklasse durch Mehrfachvererbung über mehrere Wege an eine Klasse vererbt, besitzen Objekte dieser Klasse mehrere Instanzen des Basisklassen-Slices. Durch Vererbung als virtuelle Basisklasse wird sichergestellt, dass das Basisklassen-Slice nur einmal in das Objekt eingebaut wird. Mit anderen Worten: Die abgeleiteten Klassen Student, Mitarbeiter usw. teilen sich ein gemeinsames Person-Slice. Schliesslich stellt sich noch die Frage, wann bzw. durch wen das gemeinsame Slice initialisiert wird: Der Konstruktor muss in dem Objekt, das als eigenständiges Objekt konstruiert werden soll, explizit oder implizit aufgerufen werden (ein impliziter Aufruf erfolgt durch den Compiler bei fehlendem explizitem Aufruf: Er benutzt den Standard-Konstruktor oder erzeugt einen Fehler, falls dieser nicht vorhanden ist). In unserem Beispiel ist das eigenständige Objekt der Hilfsassistent, während Student und Assistent nur als dessen Komponenten in Erscheinung treten. Abstrakte Klassen (rein virtuelle Methoden) Eine explizite Deklaration einer abstrakten Klasse, wie in Java, existiert in C++ nicht. Es können allerdings Methoden einer Klasse als rein virtuelle Methoden deklariert werden, was der Deklaration einer abstrakten Methode in Java entspricht. Dadurch wird eine C++ Klasse implizit abstrakt, d.h. es können von ihr keine Instanzen gezogen werden. Eine von einer solchen Klasse abgeleitete Klasse kann hingegen instanziert werden, sofern sie alle rein virtuellen Methoden überschreibt. Eine rein virtuelle Methode wird wie folgt deklariert: class Shape{ virtual void draw() = 0; // weitere Elemente der Klasse // diese Methode ist abstrakt, d.h. rein virtuell Im weiteren gelten ähnliche Regeln wie in Java: Wenn von einer abstrakten Klasse B eine Klasse A abgeleitet wird, welche nicht alle rein virtuellen Methoden überschreibt, ist sie ebenfalls abstrakt.

Programmieren in C++ Vererbung

Programmieren in C++ Vererbung Programmieren in C++ Vererbung Inhalt Vererbung Konstruktoren und Destruktor von abgeleiteten Klassen Typkonvertierung von Zeigern Identifikation der Klasse eines Objekts Überladen von Methoden Verdecken

Mehr

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017 Mapra: C++ Teil 6 Felix Gruber, Sven Groß IGPM, RWTH Aachen 13. Juni 2017 Felix Gruber, Sven Groß (IGPM, RWTH Aachen) Mapra: C++ Teil 6 13. Juni 2017 1 / 22 Was bisher geschah Klassen I Attribute und Methoden

Mehr

Programmierpraktikum 3D Computer Grafik

Programmierpraktikum 3D Computer Grafik Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung in C++ Teil II: Klassen, Objekte, Funktionen und Vererbung. Funktionen [Rückgabetyp] [Name] ([Parameter]) { } Wichtig: Funktionen

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

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

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21. Mehrfache Vererbung Daniel Beneckenstein 21. August 2006 Mehrfache Vererbung Ableitung einer Klasse von beliebig vielen Basisklassen: class A {... }; class B {... }; class C {... }; class D: public A,

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

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

C++ - Objektorientierte Programmierung Polymorphie

C++ - Objektorientierte Programmierung Polymorphie C++ - Objektorientierte Programmierung Polymorphie hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen C++ - Objektorientierte Programmierung 21.06.16 Seite 1 Polymorphie

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

3D Programmierpraktikum: Einführung in C++ - Teil 2

3D Programmierpraktikum: Einführung in C++ - Teil 2 3D Programmierpraktikum: Einführung in C++ - Teil 2 Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 4. Mai 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum

Mehr

Übersicht. Bisherige Verwendung von Klassen Vererbung. Zeiger auf Objekte (abgeleiteter) Klassen Virtuelle Funktionen Konstruktoren/Destruktoren

Übersicht. Bisherige Verwendung von Klassen Vererbung. Zeiger auf Objekte (abgeleiteter) Klassen Virtuelle Funktionen Konstruktoren/Destruktoren C++ - Vererbung Übersicht Bisherige Verwendung von Klassen Vererbung Grundlagen Zugriffschutz Vererbte Funktionen Zeiger auf Objekte (abgeleiteter) Klassen Virtuelle Funktionen Konstruktoren/Destruktoren

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Grundlagen der Informatik Polymorphie, Abstrakte Klassen, Mehrfachvererbung Prof. Dr.-Ing. Thomas Wiedemann Prof. Dr. rer.nat. Ralph Großmann Fachgebiet Informatik / Mathematik Überblick zum Inhalt Klassen-3

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

Vererbung und Polymorphie

Vererbung und Polymorphie page1 Vererbung und Polymorphie Florian Adamsky, B Sc florianadamsky@iemthmde http://florianadamskyit/ cbd So wareentwicklung im SS 2014 page2 Outline 1 Ein ührung 2 Vererbung Formen der Vererbung 3 Polymorphie

Mehr

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

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

Mehr

Objektorientiertes Programmieren mit C++ für Fortgeschrittene

Objektorientiertes Programmieren mit C++ für Fortgeschrittene BEREICH DATENTECHNIK I CQ 400 00 TH 02 Objektorientiertes Programmieren mit C++ für Fortgeschrittene Kapitel 4 4. Ergänzungen zur Laufzeitpolymorphie 4.1. Abstrakte Klassen 4.2. Laufzeittypinformation

Mehr

Einführung in C# Teil 3. Matthias Nübling

Einführung in C# Teil 3. Matthias Nübling Einführung in C# Teil 3 Matthias Nübling Vorausgesetzte Grundkenntnisse Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,

Mehr

OOP. Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten.

OOP. Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten. Polymorphismus OOP Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten. Vererbung: Erlaubt Code zwischen verwandten Typen wiederverwendet sein.

Mehr

9. Vererbung und Polymorphie. Informatik Vererbung und Polymorphie 1

9. Vererbung und Polymorphie. Informatik Vererbung und Polymorphie 1 9. Vererbung und Polymorphie 1 Wiederholung Vererbung bedeutet, dass eine Klasse Attribute und Methoden an eine andere Klasse weitergeben kann. Im Klassendiagramm stellt man dies durch einen durchgezogenen

Mehr

Angewandte Mathematik in OOP WS 2011/12. Abschluss-Test

Angewandte Mathematik in OOP WS 2011/12. Abschluss-Test Angewandte Mathematik in OOP WS 2011/12 Abschluss-Test 012 6 5 4 5 6 Aufgabe 1 (9 Punkte 1 Punkt je Antwort) Bitte jeweils eine Antwort ankreuzen (je nach Fragestellung die richtige oder falsche): a.)

Mehr

Objektorientiertes Programmieren mit C++ für Fortgeschrittene

Objektorientiertes Programmieren mit C++ für Fortgeschrittene BEREICH DATENTECHNIK I CQ 300 00 TH 02 Objektorientiertes Programmieren mit C++ für Fortgeschrittene Kapitel 3 3. Mehrfachvererbung 3.1. Eigenschaften und Problematik 3.2. Virtuelle Basisklassen BEREICH

Mehr

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3 Vorausgesetzte Grundkenntnisse Einführung in C# Teil 3 Matthias Nübling Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,

Mehr

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz Einführung in C++ Vererbung I Durch Vererbung können aus bereits bestehenden Klassen neue Klassen konstruiert werden. Die neue abgeleitete Klasse erbt dabei die Daten und Methoden der sog. Basisklasse.

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

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

Exceptions und Vererbung

Exceptions und Vererbung Exceptions und Vererbung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter 2. Exceptions Eigene Exceptions Handling

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

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

Vererbung Was versteht man unter dem Begriff Vererbung?

Vererbung Was versteht man unter dem Begriff Vererbung? Was versteht man unter dem Begriff Vererbung? Elternkonstrukt - Datenelemente - Methoden o Deklaration o Definition Kindkonstrukt... Main... Elternkonstrukt b = new Kindkonstrukt() b.fn() Komponenten &

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

C++ Klassen weitere Funktionen

C++ Klassen weitere Funktionen C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Objektorientierung in C++ (3) Aspekte der Vererbung (1) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 546 Zuweisung bei Vererbung Dr. Frank Seifert Vorlesung

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 2. Teil 18. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Vererbung. Was versteht man unter dem Begriff Vererbung?

Vererbung. Was versteht man unter dem Begriff Vererbung? Was versteht man unter dem Begriff Vererbung? Elternkonstrukt - Datenelemente - Methoden o Deklaration o Definition Kindkonstrukt... Main... Elternkonstrukt b = new Kindkonstrukt() b.fn() Komponenten &

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

3 VERERBUNG ALLGEMEINES

3 VERERBUNG ALLGEMEINES 3 VERERBUNG ALLGEMEINES Leitideen: Die Hinzufügung von Daten- oder Funktionskomponenten zu einer vorhandenen Klasse (Basisklasse) wird als Vererbung und die auf diese Weise erzeugte Klasse als abgeleitete

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

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Gottwald und Stefan Röhrl 8 Mai 2019 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Gottwald und Stefan Röhrl 8 Mai 2019 IDE - Integrated Development Environment

Mehr

Objektorientierte Programmierung III

Objektorientierte Programmierung III Objektorientierte Programmierung III OOP Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten. Vererbung: Erlaubt Code zwischen verwandten Typen

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

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert

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

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 Friend Klassen In einigen Fällen kann es notwendig werden, dass andere Klassen oder Funktionen

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

Programmiertechnik Klassenvariablen & Instantiierung

Programmiertechnik Klassenvariablen & Instantiierung Programmiertechnik Klassenvariablen & Instantiierung Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Klassenvariablen Zur Erinnerung: Klassen bestehen aus Variablen und Methoden; beide zusammen

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

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

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

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

Polymorphismus 44. Function.hpp. #include <string>

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

Mehr

Vererbung. Florian Adamsky, B. Sc. (PhD cand.) Softwareentwicklung im WS 2014/15.

Vererbung. Florian Adamsky, B. Sc. (PhD cand.) Softwareentwicklung im WS 2014/15. 1/23 Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/23 Outline 1 2 Formen der C++ Syntax 3/23 Inhaltsverzeichnis 1 2 Formen

Mehr

Einführung in das Objektorientierte Programmieren mit C++

Einführung in das Objektorientierte Programmieren mit C++ BEREICH DATENTECHNIK I CP 700 00 TH 03 Einführung in das Objektorientierte Programmieren mit C++ Kapitel 7 7. Laufzeit-Polymorphie 7.1. Frühes und spätes Binden 7.2. Virtuelle Funktionen FG TECHNISCHE

Mehr

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

Einführung in die Programmierung mit C++

Einführung in die Programmierung mit C++ 1 Seite 1 Einführung in die Programmierung mit C++ Teil III - Objektorientierte Programmierung 10. Vererbung und Polymorphie Vererbung und Polymorphie in C++ Seite 2 Klassen können von anderen Klassen

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

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden Einleitende Bemerkungen Einleitende Bemerkungen Aspekte Aufbau von sinnvollen Klassenhierarchien Verwaltung von Objekten unterschiedlichen Typs Mitarbeiter Besonderheiten der Anwendung jeder Angehörige

Mehr

Programmieren in Java

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

Mehr

Kapitel 8 Vererbung. Korbinian Molitorisz. IPD Tichy Lehrstuhl für Programmiersysteme

Kapitel 8 Vererbung. Korbinian Molitorisz. IPD Tichy Lehrstuhl für Programmiersysteme Kapitel 8 Vererbung Korbinian Molitorisz IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Vererbung im Fall von Klassen

Mehr

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,

Mehr

Die verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen

Die verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen Software-Technik: Vom Programmierer zur erfolgreichen 1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation des Quellcodes 4. Werte- und Referenzsemantik 5. Entwurf

Mehr

Überschreiben von Methoden

Überschreiben von Methoden Vergleich der DoME Realisierungen: Methode ausgeben Version 1 (ohne Vererbung): Anzeigen aller Informationen CD: A Swingin Affair (64 Min)* Frank Sinatra Titelanzahl: 16 Mein Lieblingsalbum von Sinatra

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

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

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

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor 7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor Das Programmbeispiel aus dem letzten Abschnitt läßt sich bisher nicht zufriedenstellend zu Ende bringen. Unerklärliche Abstürze und Fehlverhalten

Mehr

Das Interface-Konzept am Beispiel der Sprache Java

Das Interface-Konzept am Beispiel der Sprache Java Das Interface-Konzept am Beispiel der Sprache Java Klaus Kusche, November 2013 Inhalt Motivation: Wozu braucht man Interfaces? Interfaces in Java Was spricht gegen die große Lösung? Voraussetzungen Kenntnisse

Mehr

Erste Java-Programme (Java Wiederholung & Vererbung)

Erste Java-Programme (Java Wiederholung & Vererbung) Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Java Wiederholung & ) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/

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

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

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

Einführung in die Programmierung

Einführung in die Programmierung Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität

Mehr

Programmieren in C++ Klassen

Programmieren in C++ Klassen Programmieren in C++ Klassen Inhalt Klassen (vertieft) Destruktor Konstruktoren Move-Semantik und Rechtswert-Referenzen (C++11) C++11 Features Prof. Dr. C. Stamm Programmieren in C++, FS 13 4-2 Implementierung

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

Praxis der Programmierung

Praxis der Programmierung Klassenvariablen und -methoden, Vererbung Institut für Informatik und Computational Science Henning Bordihn 1 Klassenvariablen und -methoden 2 Klassenvariablen und -methoden werden mit dem Schlüsselwort

Mehr

Einführung in die Programmiersprache Java II

Einführung in die Programmiersprache Java II Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden

Mehr

Prinzipien der objektorientierten Programmierung (OOP)

Prinzipien der objektorientierten Programmierung (OOP) Die Ziele der OOP sind: - bessere Warbarkeit - Wiederverwendbarkeit 1.) Datenkapselung Prinzipien der objektorientierten Programmierung (OOP) Komplexe Datenstrukturen (wie zb ein Stack) werden vom Anwendungsprogramm

Mehr

Java Einführung Vererbung und Polymorphie. Kapitel 13

Java Einführung Vererbung und Polymorphie. Kapitel 13 Java Einführung Vererbung und Polymorphie Kapitel 13 Inhalt Klassifikation (UML) Implementierung von Vererbungshierarchien Überschreiben von Methoden Polymorphismus: Up-Casting und Dynamisches Binden Schlüsselwort

Mehr

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II 432 Polymorphie 15. Java Objektorientierung II Objektorientierung: Verschiedene Aspekte 433 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen zuweisen

Mehr

Vererbung, Polymorphismus

Vererbung, Polymorphismus Vererbung, Polymorphismus INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Automobilbau Firma produziert Limousine Kunde möchte Kombi Wielösen? Möglichkeiten Neudesign

Mehr

Objektorientierte Sprachen

Objektorientierte Sprachen Objektorientierte Sprachen Eine Sprache, die Objekte unterstützt, heißt objektbasiert Eine klassenbasierte Sprache unterstützt zusätzlich Klassen Eine objektorientierte Sprache unterstützt zusätzlich die

Mehr

Mikrorechentechnik II. Klassen in C++

Mikrorechentechnik II. Klassen in C++ Mikrorechentechnik II Klassen in C++ class class cfilter { float K; float T; float Ta; public: // Filterverstärkung // Filterzeitkonstante // Tastzeit Zugriffskontrolle: public, protected, private void

Mehr

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II 446 Polymorphie 15. Java Objektorientierung II Objektorientierung: Verschiedene Aspekte 447 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen zuweisen

Mehr

Programmierpraktikum 3D Computer Grafik

Programmierpraktikum 3D Computer Grafik Prof. Andreas Butz Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung in C++ Teil II: Klassen, Objekte, Funktionen und Vererbung. Nachtrag: Virtuelle Funktionen # 2 Virtuelle Funktionen

Mehr

Bereits behandelt: Klassen, Konstruktoren, Destruktoren etc. Operatoren. Heute: Namensräume. Vererbung. Kompaktkurs C++ Themen F 1

Bereits behandelt: Klassen, Konstruktoren, Destruktoren etc. Operatoren. Heute: Namensräume. Vererbung. Kompaktkurs C++ Themen F 1 Kompaktkurs C++ Themen F 1 Bereits behandelt: Klassen, Konstruktoren, Destruktoren etc. Operatoren Heute: Namensräume Vererbung Kompaktkurs C++ Namensräume F 2 Namensräume fassen Datentypen, Variablen

Mehr

Praxisorientierte Einführung in C++ Lektion: "Vererbung"

Praxisorientierte Einführung in C++ Lektion: Vererbung Praxisorientierte Einführung in C++ Lektion: "Vererbung" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ April 24, 2014 1 / 23 Table

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

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Abend 4 Übung : Erweitern von Klassen durch Vererbung Abend 4 Übung : Erweitern von Klassen durch Vererbung Ziel, Inhalt Wir erweitern die Klassen, die wir zum Zeichnen mit TsuZeichnen verwenden. Dabei wenden wir die Vererbung an um die Klassen zu spezialisieren

Mehr

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article 2.13 Vererbung Klassen modellieren Objekte der realen Welt. Diese sind oft hierarchisch gegliedert. Beispiel: Ein Verlag bietet Bücher und CDs an. Beide Medien sind Artikel des Verlages. Book author: String

Mehr

Programmieren 1 09 Vererbung und Polymorphie

Programmieren 1 09 Vererbung und Polymorphie Programmieren 1 09 Vererbung und Polymorphie Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 I. VERERBUNG 2 2 Vererbung Von Interfaces übernehmen

Mehr

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

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr

Programmierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University

Programmierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University January 18, 2019 Konzepte Standard-Konzepte für Code Reuse: Polymorphie/Vererbung Funktionalität

Mehr

Objektorientiert in C++

Objektorientiert in C++ Dirk Louis Objektorientiert in C++ Einstieg und professioneller Einsatz intwickier.pres: Vorwort 11 1 Schnellkurs C++ 13 1.1 ANSI-C++ und die Compiler 13 Compiler und Programmerstellung 13 ANSI und die

Mehr

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor: 4. Vererbung Grundlagen der Vererbung 4. Vererbung 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende

Mehr

Einführung in C++ Vererbung und Polymorphismus

Einführung in C++ Vererbung und Polymorphismus Einführung in C++ Vererbung und Polymorphismus Ablauf Grundlegende Eigenschaften der Vererbung in C++ Redefinition und Namensauflösung Eine einfache Klassenhierarchie in Java und C++ Redefinition von virtuellen

Mehr

Grundlagen der Objektorientierten Programmierung - Methoden -

Grundlagen der Objektorientierten Programmierung - Methoden - Methoden In ihrem formalen Aufbau entsprechen Java-Methoden den Funktionen in C und C++. Eine Methode dient dazu, eine häufig benötigte Folge von Anweisungen unter einem Namen zusammenzufassen und zum

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr