11.3 Virtuelle Methoden
|
|
- Dagmar Richter
- vor 7 Jahren
- Abrufe
Transkript
1 11.3 Virtuelle Methoden Überdeckte Methoden: Betrachten wir noch einmal unsere Klassen Employee und Manager. class Employee void print() const cout << "Employee: " <<...; class Manager : public Employee //.. void print() const cout << "Manager: " <<...; Die Methode print() ist in diesem Falle überdefiniert. print() in Manager überdeckt die Methode aus Employee. Sind im Programm zwei Objekte Employee e(...); Manager m(...); definiert, dann verhält sich das Programm wie erwartet: e.print() ruft Employee::print() m.print() ruft Manager::print() Überdefinition ist auch für Attribute möglich. und auf. Bei dem Zugriff auf eine Methode oder ein Attribut erfolgt die Suche nach der gültigen Deklaration/Definition erst in der Klasse selbst und dann in der direkten Oberklasse. Ist eine Methode auch in der direkten Basisklasse nicht sichtbar, wird sie nicht gefunden - es tritt ein Fehler auf. Folge von Überdefinition: Methoden der Objekte der Basis- und Unterklasse besitzen unterschiedliche Funktionalität unter gleichem Namen. Das Objekt der Unterklasse kennt immer auch die Methode der Basisklasse (Namensauflösung!). aber: Nicht das Objekt trifft die Auswahl als Experte sondern der Betrachter Typ bestimmt ausgeführte Methode! WS 2001/02 Programmierkurs C++ Seite 188 WS 2001/02 Programmierkurs C++ Seite 189 Entscheidend ist hier, daß der Typ von e und m bereits zur Compilezeit feststellbar waren. Was passiert aber bei folgender Funktion void ausgabe(employee& emp) emp.print(); wenn ausgabe(e) oder ausgabe(m) aufgerufen werden? Das ist möglich, da an jeder Stelle wo ein Employee steht auch ein Manager stehen darf. Hier wird aber immer die Methode Employee::print() aufgerufen. Normalerweise entscheidet der Compiler, welchen Methodenaufruf er zur Compilezeit ausführt. Dies gilt auch, wenn Funktionen überladen sind. In diesem Fall kann diese Entscheidung aber erst zur Laufzeit getroffen werden. Polymorphismus: Darunter versteht man die Fähigkeit, zur Laufzeit auf der Basis der Objekttypen zu entscheiden, welche von unterschiedlichen überladenen Elementfunktionen aufgerufen werden soll. Es ist der Schlüssel zur Leistungsstärke der objektorientierten Programmierung und ohne ihn macht die Vererbung wenig Sinn. C++ unterstützt dies. Hierzu werden Methoden als virtual deklariert: class Employee virtual void print() const... class Manager : public Employee virtual void print() const... Das Schlüsselwort virtual darf nur in der Klassendeklaration verwendet werden. Bei der Methodendefinition ist es wegzulassen. WS 2001/02 Programmierkurs C++ Seite 190 WS 2001/02 Programmierkurs C++ Seite 191
2 Dies bewirkt, daß unabhänigig vom Typ eines Zeigers, der auf ein Objekt verweist, das Objekt zu einer Signatur genau eine Methode anbietet. Hierfür muß auch in der Basisklasse die in der abgeleiteten Klasse definierte Funktion bekannt sein. Beim Aufruf einer virtuellen Methode wird in jedem Fall zunächst in den abgeleiteten Klassen und dann in der Oberklasse nach eine Beschreibung gesucht. Eine virtuelle Methode ist in allen erbenden Klassen virtuell, das Schlüsselwort kann dort wahlweise entfallen (üblicherweise schreibt man es aber immer). Dies bewirkt, daß Methoden objektspezifisch (re)definiert werden können und die Auswahl der Methode vom Objekt getroffen wird. ausgabe(e); Employee... ausgabe(m); Manager... Der Polymorphismus funktioniert aber nur, wenn mit Zeigern auf Objekte und Referenzen gearbeitet wird. Eine Änderung des Funktionskopfes von ausgabe(employee& e) nach void ausgabe(employee emp)... bewirkt, daß unabhängig vom übergebenen Objekt die Methode Employee::print() aufgrufen wird. Im letzten Fall wird von dem Objekt, das der Methode übergeben wird, eine lokale Kopie angelegt (Call-by-Value). Wird ein Objekt vom Typ Manager übergeben, so wird in emp nur der Teil kopiert, der beiden Klassen bekannt ist (Slicing). Es wird ja auch nur Speicherplatz für ein Objekt Employee reserviert. Employee e; Manager m; e = m; Employee Manager m e Employee Kennt die Member von Manager nicht mehr (Entnommen aus Programmierkurs C++, C. Veltmann und S. Dißman, FB Informatik, Universität Dortmund, wie auch die folgenden) WS 2001/02 Programmierkurs C++ Seite 192 WS 2001/02 Programmierkurs C++ Seite 193 Zur Erinnerung: Zeiger sind Variable, in denen Adressen von Objekten abgelegt werden können. Deshalb gilt: Eine Variable reserviert genau den Speicherplatz, den das zugehörige Objekt belegt. Größere Objekte haben nicht genug Platz. Ein Zeiger benötigt genau den Speicherplatz einer Adresse, die Größe des Objekts spielt keine Rolle. Vereinbarung von Zeigervariablen: Employee *pe; Dereferenzierung: pe->print(); dynamische Erzeugung: pe = new Employee; Speicherfreigabe: delete pe; Wie hilft das hier weiter?: Ein Zeiger auf eine Basisklasse kann auch auf Objekte der zugehörigen abgeleiteten Klasse verweisen: Employee *pe = new Manager; Verweist ein Zeiger der Basisklasse auf ein Objekt der abgeleiteten Klasse, so bleibt das gesamte Objekt der Unterklasse erhalten. Es ist daher möglich, ein Objekt wechselweise ohne Verlust Zeigern aus seiner Klasse sowie Zeigern aus allen seinen Basisklassen zuzuweisen. Verweist ein Zeiger der Basisklasse auf ein Objekt der abgeleiteten Klasse, so sind über den Zeiger jedoch nur die Methoden der Basisklasse sichtbar. Employee *e; Manager *m; e = new Manager; m = static_cast<manager*>(e); m Employee Manager Das ist auch der Grund, warum Objekte als Zeiger und Referenzen übergeben werden sollen, damit der Polymorphismus nicht außer Kraft gesetzt wird. Mit virtuellen Methoden läßt sich echte Polymorphie realisieren: Das Objekt entscheidet, welche Methode ausgeführt wird. e WS 2001/02 Programmierkurs C++ Seite 194 WS 2001/02 Programmierkurs C++ Seite 195
3 Hinweise: Immer wenn davon auszugehen ist, daß eine Funktion in einer abgeleiteten Klasse überschrieben wird, sollte man die Funktion in der Basisklasse als virtual deklarieren. Nicht virtuelle Methoden sollten nicht überschrieben werden, um das Verhalten überschaubar zu gestalten. Immer wenn Objekte einer Klasse dynamisch genutzt werden sollen, ist es ratsam virtuelle Destruktoren zu verwenden: Virtuelle Destruktoren Konstruktoren können nicht virtuell sein, weil es kein (vollständiges) Objekt gibt, das zur Festlegung des Typs dienen könnte. Der Destruktor kann aber virtuell deklariert werden, und dies sollte man in der Regel auch tun: class Base int bvalue; Base(int v)bvalue = v; virtual ~Base()cout << "~Base" << endl; class SubClass : public Base int svalue; SubClass(int bv, int sv) : Base(bv), svalue(sv) virtual ~SubClass() cout << "~SubClass" << endl; int main() Base *pb = new SubClass(1,2); // OK nur mit virtuellem Destruktor delete pb; Ohne eine Deklaration des Destruktors als virtual wäre das folgende passiert: Das dynamisch erzeugte Objekt der Klasse SubClass wird mit einem Zeiger *pb auf die Basisklasse Base gespeichert. Bei der Freigabe des Objekts mit delete, wird der Destruktor der Basisklasse aufgerufen (ausprobieren!). Dieser kennt nur die Member der Basisklasse und gibt deshalb zu wenig Speicher frei. WS 2001/02 Programmierkurs C++ Seite 196 WS 2001/02 Programmierkurs C++ Seite Abstrakte Klassen Abstrakte Methoden sind solche, die nur aus der Deklaration einer Schnittstelle ohne die Definition ausführbaren Programmcodes bestehen. Gewünscht ist eine Beschreibung ähnlich einem Prototyp, bei dem aber Compiler/Linker keine Funktionsdefinition erwarten. Solche Methoden sollen in einer Oberklasse bekannt sein, aber erst in Unterklassen definiert werden, da nur dort eine sinnvolle Ausgestaltung möglich ist. Solche abstrakten Methoden müssen immer virtuell vereinbart werden. Eine abstrakte Methode führt zu einer abstrakten Klasse. Diese kann nicht verwendet werden, um Objekte zu erzeugen. So etwas ist z.b. notwendig, wenn abstrakte Konzepte wie z.b. Formen (als Oberbegriff zu Dreiecken, Kreisen, Vierecken...) realisiert werden sollen. Eine andere Anwendung sind Schnittstellen zu peripheren Geräten. Das System kann eine abstrakte Methode anbieten, ohne, daß Details dahinter bekannt sein müssen. WS 2001/02 Programmierkurs C++ Seite 198 Beispiel: Es sollen verschieden Formen verwaltet werden können. Der Flächeninhalt und notwendige Attribute zur Beschreibung sind von der speziellen Form abhängig. class Shape virtual double area() = 0; virtual void draw() = 0; virtual ~Shape() Rein virtuelle Methoden werden durch =0 gekennzeichnet. Eine abstrakte Klasse besitzt keine Datenmember. Abstrakte Klassen können nur als Schnittstelle oder als Basisklasse für andere Klassen verwendet werden. Shape s; führt zu einer Fehlermeldung. class Circle : public Shape double radius; Circle(double r) : radius(r) virtual double area(); virtual void draw(); virtual ~Circle() WS 2001/02 Programmierkurs C++ Seite 199
4 double Circle::area() return radius*2*m_pi; void Circle::draw() // draw cirlce oder eine weiter Klasse für Rechtecke: class Rectangle : public Shape double a,b; Rectangle(double x, double y) : a(x), b(y) virtual double area() return a*b; virtual void draw(); virtual ~Rectangle() int main() Shape *s1 = new Circle(2.3); Shape *s2 = new Rectangle(2.0,3.0); cout << "Flaeche s1 = " << s1->area() << endl; cout << "Flaeche s2 = " << s2->area() << endl; delete s1; delete s2; 11.5 Geschachtelte Klassen Klassen können selbst wieder Klassen enthalten: 1. Der Name einer in einer Klasse vereinbarten Klasse ist dort lokal. 2. Auf solche Klassen kann aber mit dem Bereichsoperator zugegriffen werden. Insbesondere können so auch Instanzen ohne ein Objekt der umgebenden Klasse erzeugt werden: Es darf daher nicht auf ein Element von Objekten der umgebenden Klasse zugegriffen werden, sondern nur auf Klassenmember. 3. Die eingebettete Klasse hat keine besonderen Zugriffsrechte auf die umgebende Klasse. 4. Die umgebende Klasse hat keine besonderen Zugriffsrechte auf die eingebettete Klasse. 5. Die umgebende Klasse enthält zunächst nur die Definition der eingebetteten Klasse Objekte dieser Klasse müssen in der umgebenden Klasse explizit erzeugt werden. WS 2001/02 Programmierkurs C++ Seite 200 WS 2001/02 Programmierkurs C++ Seite 201 class Aussen Aussen(int aus=0, int in=0) : zahl(aus), inobj(in) int summe() return zahl + inobj.lieswert(); class Innen Innen () Innen (int i) wert = i; int lieswert() return wert; void setzewert (int i) wert = i; protected: int wert; protected: Innen inobj; int zahl; zu 1./2.: Innen Obj; führt zu einer Fehlermeldung des Compilers ( Innen undeclared). Aussen::Innen Obj; ist erlaubt. Obj besitzt dann nur Member, die zur Klasse Innen gehören: Obj.summe() führt zur Fehlermedlung no matching function for call to Aussen::Innen::summe () zu 3./4.: Eine Instanz Aussen ausobj; zu 5.: besitzt kein Member ausobj.wert. kann nicht über ausobj.inobj.wert auf das Datenmember wert von inobj zugreifen. Ohne den Konstruktoraufruf von inobj enthält ausobj; eine Instanz von Innen, die nicht definiert initialisiert ist. Eine nachträgliche Initialisierung ist nicht möglich ausobj.inobj.setzewert(5); class Aussen::Innen Aussen::inObj is protected in this context WS 2001/02 Programmierkurs C++ Seite 202 WS 2001/02 Programmierkurs C++ Seite 203
5 11.6 Einfach-/Mehrfachvererbung Einfachvererbung: Es können soviele Klassen wie nötig aus einer bestimmten Klasse abgeleitet werden, auch wenn es sich bei der letzteren selbst um eine abgeleitete Klasse handelt: class A... class B : A... class C : A... class D : B... class E : B... D B Jede abgeleitete Klasse erbt ihre Attribute von genau einer Basisklasse. Generalisierung/Spezialisierung einer Klasse durch Hinzufügen bzw. Entfernen von Attributen. Bereitstellung einer Alternativschnittstelle (z.b. Redefinition von Methoden) A E C Mehrfachvererbung: Es gibt auch Probleme, deren Lösung eine unterschiedliche Form der Vererbung verlangen. class A... class B... class C... class D : A, B... class E : B, C... class F : D, C, E... A D B F Beispiel: Eine Benutzeroberfläche mit Fenstern, Scroll Leisten, Dialogboxen, usw.. Diese Elemente sollen von einer Klasse unterstützt werden. Jetzt sollen ein Fenster und eine Scroll Leiste so kombiniert werden, daß ein verschiebbares Fenster entsteht. Gegeben seien die Klassen Window und ScrollBar: C E WS 2001/02 Programmierkurs C++ Seite 204 WS 2001/02 Programmierkurs C++ Seite 205 class Window Window(int top, int left, int bot, int right); ~Window(); class ScrollBar ScrollBar(int top, int left, int bot, int right); ~ScrollBar(); class ScrollableWind: public Window, ScrollBar ScrollableWind (int top, int left, int bot, int right); ~ScrollableWind(); ScrollableWind kann neben den von Window und ScrollBar angebotenen Membern auch neue Member aufweisen. Durch die Vererbung als public werden die public Member der Basisklasse auch in der abgeleiteten Klasse public. Bei den Zugriffsrechten gilt alles analog zur Einfachvererbung. Eine abgeleitete Klasse kann eine beliebige Anzahl von Basisklassen besitzen. Diese müssen sich aber voneinander unterscheiden. Die naheliegendste Implementierung eines abgeleiteten Klassenobjekts ist, daß es ein Objekt aus jeder seiner Basisklassen enthält. Wenn die Basisklassen Konstruktoren besitzen, die Argumente übernehmen, dann sollte die abgeleitete Klasse diese explizit aufrufen: Scrollable Window:ScrollableWindow (int top, int left, int bot, int right) : Window(top,left,bottom,right), ScrollBar(top,,left,bottom,right) Die Reihenfolge der Aufrufe entspricht der angegebenen. WS 2001/02 Programmierkurs C++ Seite 206 WS 2001/02 Programmierkurs C++ Seite 207
6 Mehrfachvererbung kann die Regeln zum Ansprechen der Member einer Klasse verkomplizieren. Angenommen die Klassen Window und ScrollBar besitzen beide eine öffentliche Memberfunktion void move (int x, int y); Die abgeleitete Klasse ScrollableWind enthält beide Member und der Aufruf ScrollableWind sw; sw.move(10,20); ist nicht eindeutig. Deshalb muß entweder der Aufruf explizit gemacht werden sw.window::move(10,20); oder man definiert in der abgeleiteten Klasse eine solche Methode void Move(int x, int y) Window::Move(x,y); ScrollBar::Move(x,y); Dies ist hier auch deshalb sinnvoll, da das Fenster selbst als auch die Scroll Leiste verschoben werden müssen. Für jede abgeleitete Klasse gibt es eine implizite Umwandlung von der abgeleiteten zu jeder ihrer public Basisklassen. Diese können zur Umwandlung der Objektzeiger (oder Referenzen) von abgeleiteten Klassen in Objektzeiger (oder Referenzen) von Basisklassen verwendet werden: ScrollableWind sw1(10,10,200,200); Window* w1 = &sw1; // object pointer Window& w2 = sw1; // object reference Für die Objekte selbst ist eine solche Umwandlung (wie gehabt) unzulässig: Window w3 = sw1; // ERROR! Es gibt keine explizite Umwandlung von einer Basisklasse in eine abgeleitete Klasse: ScrollableWind* sw2 = w1; // ERROR! Dies geht aber explizit über eine Typkonvertierung: ScrollableWind* sw3 = (ScrollableWind*) w1; // o.k. aber die zur Basisklasse ScrollBar gehörenden Member sind in diesem Falle nicht initialisiert! WS 2001/02 Programmierkurs C++ Seite 208 WS 2001/02 Programmierkurs C++ Seite 209
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
Mehr11 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
MehrMapra: 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
MehrProgrammierkurs. 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
MehrVorlesung 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
MehrProgrammierpraktikum 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Ü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Ü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
MehrGrundlagen 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,
MehrEinfü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
MehrAngewandte 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.)
MehrC++ - 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
MehrGrundlagen 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
Mehr3D 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
MehrC++ - 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.
MehrOOP 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
MehrKapitel 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
MehrDAP2-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
MehrHSR 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Ü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
MehrDie abgeleiteten Klassen Kreis und Viereck erben die Elemente des Basisklasse und verfügen über zusätzliche Eigenschaften (Seitenlänge,
Kompaktkurs C++ Vererbung (inheritance) 1 Oft besitzen verschiedene Datentypen einen gemeinsamen Kern: Kreis und Viereck sind geometrische Figuren; sie haben eine Kantenzahl, eine Fläche, einen Umfang
MehrC++ - 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
Mehr01. Grundprinzipien der Vererbung
01. Grundprinzipien der Vererbung 1.1 Grundidee der Vererbung Bei der Analyse eines Problems (z.b. Baukasten) stellt man beispielsweise fest, dass 67 % an Daten/Funktionen immer vorkommen 25 % an Daten/Funktionen
MehrOOP 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
MehrThema 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:
MehrThema 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:
MehrVererbung. Oberklassen und Unterklassen
Vererbung Oberklassen und Unterklassen Vererbung ist ein zentrale Bestandteil der Objektorientierung. Man beschreibt damit die Möglichkeit, Eigenschaften und Methoden vorhandener Klassen auf andere (neue)
MehrObjektorientierte 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
MehrKapitel 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
MehrPraxis 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
MehrC++ - 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
MehrPolymorphismus 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
Mehr8. Referenzen und Zeiger
8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen
MehrGrundkurs 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
MehrProgrammierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund.
Programmierkurs SoSe 2013 Markus Geveler Inst. f. Applied Mathematics, TU Dortmund markus.geveler@math.tu-dortmund.de Lesson 5 Was machen wir heute hier? weiter mit Objektorientierter Programmierung viel
MehrEinfü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
MehrObjektorientierung (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
MehrGrundkurs 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
MehrEinführung in die Programmierung mit C++
1 Seite 1 Einführung in die Programmierung mit C++ Teil III - Objektorientierte Programmierung 9. Klassen und Methoden Was sind Klassen? Seite 2 sprachliches Mittel von C++ um objektorientierte Programmierung
MehrProgrammieren 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
MehrEinstieg 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
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrPolymorphismus 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
MehrDie 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
MehrProgrammierung 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
MehrEinstieg 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
Mehr4. Objektorientierte Programmierung mit C++
4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts
MehrGrundkurs 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
MehrJava, OO und UML Fortsetzung
Java, OO und UML Fortsetzung Das Objektorientierte Paradigma OO bildet keine geschlossene theoretisch abgegrenzte Basis (wie z.b. das Relationsmodell relationaler Datenbanken) OO ist eine Sammlung und
MehrMikrorechentechnik 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
MehrRückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren
Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren class Vektor public: double k1, k2; // Deklaration der Klasse Vektor // Elementvariablen
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Objektorientierung in C++ (2) Beziehungen zwischen Klassen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 530 Beziehungen zwischen Klassen Assoziation
MehrProgrammierkurs C/C++
Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Donnerstag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Structs Blockkurs: "Einführung in C/C++" 2 Structs sind Bündel von Variablen (unter
MehrVorkurs 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
Mehr3 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
MehrInnere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11
MehrPolymorphie und UML Klassendiagramme
Polymorphie und UML Klassendiagramme Prof. Dr.-Ing. Thomas Schwotzer 1 Einführung Vererbung hat einen sehr interessanten und effektiven Effekt: die Polymorphie. Darum geht es in dieser Veranstaltung. 2
MehrEinstieg 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
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Mehr7. Ü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
MehrVererbung 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
MehrVererbung. 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
MehrObjektorientiertes 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
MehrVererbung, 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
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrProgrammieren 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
MehrNeben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter
Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener
MehrOOP. 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.
MehrVererbung, 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
MehrVererbung 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
MehrEinstieg 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
MehrTheorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
MehrProgrammierung III. Pointer für Fortgeschrittene Marc Ruberg. Arrays von Pointern ( Zeigervektoren ): Pointer auf Pointer:
Programmierung III Marc Ruberg 1 Pointer für Fortgeschrittene Arrays von Pointern ( Zeigervektoren ): long *zahlenptr[25]; char *strptr[1000]; Pointer auf Pointer: char **sp Zeiger auf Funktionen: Typ
MehrC++ 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
MehrProgrammierkurs C/C++
Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Freitag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Blockkurs: "Einführung in C/C++" 2 Vererbung Klassen erben die Member von Basisklassen:
MehrProgrammierkurs Java
Programmierkurs Java Abstrakte Klassen und Methoden & Interfaces Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie
MehrProgrammierkurs C++ Abstrakte Klassen und Methoden
Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double
MehrObjektorientierte 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
MehrKlassen. Kapitel Klassendeklaration
Kapitel 4 Klassen Wir kommen nun zu einem sehr wichtigen Aspekt der OOT: zu den Klassen. Eine Klasse ist eine vom Benutzer definierte Datenstruktur, eine Sammlung von Variablen (unterschiedlichen Typs)
MehrDie abstrakte Klasse Expression:
Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die
MehrEinfü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,
MehrInformatik II Übung 6
Informatik II Übung 6 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 11.4.2018 Carina Fuss 11.4.2018 1 Übung 6 Nachbesprechung Übung 5 Objektorientierung Vererbung, Polymorphie, abstrakte Klassen, Interfaces,
MehrProf. 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
Mehr7.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
MehrVorausgesetzte 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,
MehrKapitel 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
MehrInformationsverarbeitung im Bauwesen
1/21 Informationsverarbeitung im Bauwesen Einführung in das Programmieren mit C++ Markus Uhlmann Institut für Hydromechanik Karlsruher Institut für Technologie www.ifh.kit.edu WS 2010/2011 Vorlesung 8
MehrPraxisorientierte Einführung in C++ Lektion: "Virtuelle Methoden"
Praxisorientierte Einführung in C++ Lektion: "Virtuelle Methoden" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ April 24, 2014
MehrProgrammierkurs C++ Polymorphismus
Programmierkurs C++ Polymorphismus Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Polymorphismus Methoden von Oberklassen können in
MehrRepetitorium 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
MehrEinstieg 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
MehrProgrammierparadigmen
Programmierparadigmen DEKLARATIV Funktional Logisch IMPERATIV Prozedural Objektorientiert Einsatz der Programmierparadigmen Systemkomplexität von der Komplexität der Algorithmen dominiert deklarativ oder
MehrWiederholung. Klassenhierarchie:
Wiederholung Klassenhierarchie: class Unter extends Ober {... Die Unterklasse Unter erweitert die Funktionalität ihrer Oberklasse Ober. Objekte der Klasse Unter können anstelle von Objekten der Klasse
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
Mehr"Roman Jachs" PR Überblick C++ Roman Jachs 5 AHD 1998/99. Überblick C++
Überblick C++ 1. GRUNDLAGEN UND KONZEPTE DER OBJEKTORIENTIERTEN PROGRAMMIERUNG 2 2. KLASSEN UND OBJEKTE 2 2.1 WAS IST EINE KLASSE? 2 2.2 WAS IST EIN OBJEKT? 2 2.3 KONSTRUKTOREN 3 COPY KONSTRUKTOR 3 2.4
MehrVererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1
Vererbung 1 11.1 Motivation und Begriffsdefinitionen 11.2 Vorgehensweise und Implementierung 11.3 Arten von Vererbung 11.4 Konstruktoren 11.5 Abstrakte Klasse 11.6 Verschattung 11.7 Wurzelklasse Object
MehrAufbau 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
MehrEinfü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
MehrProgrammieren 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
MehrObjektorientierte 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