Einführung in C++ Vererbung und Polymorphismus

Größe: px
Ab Seite anzeigen:

Download "Einführung in C++ Vererbung und Polymorphismus"

Transkript

1 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 Elementen und Polymorphismus Dynamische und Statische Typenumwandlung (Casts) Virtuelle Destruktoren Operatoren überladen und Vererbung Mehrfachvererbung 1

2 Ziele Sie wissen, was Vererbung prinzipiell ist, kennen den Unterschied zwischen public, protected und private Vererbung, und verstehen das Prinzip des Konstruktur-Aufbau Sie wissen, was Redefinition von Elementen bedeutet Sie verstehen, wie Polymorphismus in C++ funktioniert und welchen Einfluss dabei virtuelle Methoden haben Sie verstehen das Konzept von dynamischen und statischen Typenumwandlung (Casts) und können diese Casts anwenden Sie verstehen das Konzept der virtuellen Destruktoren und den Zusammenhang zwischen überladenen Operatoren und Vererbung Sie verstehen die grundlegende Idee von Mehrfachvererbung, die potentiellen Probleme, die dabei auftauchen, und wie man mit diesen Problemen umgeht Einführung (1) In C++ (wie in Java) können Klassen abgeleitet werden Vererbung Superklasse Subklasse Subklasse... Subklasse Subklasse Superklasse: Klasse, von welcher vererbt wird Subklasse: die Klasse, welche die Methoden erbt Von einer Subklasse können wiederum Subklassen abgeleitet werden Begriffe Superklasse und Subklasse sind relativ Keine Interfaces in C++ Mehrfachvererbung in C++: eine Klasse kann von mehr als einer Klasse abgeleitet werden 2

3 Einführung (2) Eine Subklasse erbt alle public und protected (nicht aber private) Methoden und alle Datenelemente aller ihrer Superklassen (auch der,,indirekten" Superklassen) Subklassen können eine Methode einer Superklasse überschreiben und damit die Methode der Superklasse in der Subklasse überdecken Redefinition von Elementen Gilt auch für Datenelemente und statische Variablen Einführung (2) C++ unterstützt wie Java Polymorphismus: - eine Variable vom Typ einer Superklasse kann irgendeine Variable vom Typ einer Subklasse beinhalten Generell gilt: Vererbung und Polymorphismus werden flexibler gehandhabt als in Java, sind aber auch fehleranfälliger Beispiel: in Java ist eine Objektvariable immer,,polymorph", in C++ wird dies vom Programmierer kontrolliert 3

4 Vererbung (1) Definition einer abgeleiteten Klasse mit Doppelpunkt:und dem Zugriffs-Spezifizierer (Angabe der Zugriffsrechte): Java: class B extends A {... C++: class B : public A {... Alle public und protected Methoden und Variablen werden vererbt und sind dadurch auch in der Subklasse vorhanden Diese Sichtbarkeit kann mit Angabe der Zugriffsrechte nach dem Doppelpunkt weiter eingeschränkt werden: Variable/Methode in Superklasse public protected Subklasse vererbt als public protected private (Def.) Variable/Methode in Subklasse public protected private protected protected private private Kein Zugriff Kein Zugriff Kein Zugriff Vererbung (2) Man beachte, dass der Default Zugriffs-Spezifiziererprivate ist und nicht public auch wenn man in den allermeisten Fällen public benötigt. Java kennt diese Einschränkung mittels Zugriffs-Spezifizierer bei der Vererbung nicht es wird immer public vererbt Ein als protected deklariertes Element b ist wie ein privat- Element vor dem Zugriff von aussen geschützt Für Objekte der Super- und Subklasse ist dieses b nicht ansprechbar. Im Gegensatz zu einem private Element können aber Methoden abgeleiteter Klassen darauf zugreifen. 4

5 Vererbung (3) Beispiel zu private / protected / public Vererbung: a.priv++; a.prot++; a.publ++; b.priv++; b.prot++; b.publ++; class A { private: int priv; protected: int prot; int publ; Zugriff von aussen (f()) pxxx = private nein pxxx = protected nein nein ja nein nein nein pxxx = public ja class B : pxxx A { void m() {... void f() { A a; B b; Zugriff innerhalb von B (m()) priv++; prot++; publ++; unabhängig von pxxx nein ja ja Vererbung (4) private / protected Vererbung: allepublic Methoden der Superklasse sind in der Subklasse nicht mehr publicoft eine zu starke Einschränkung Abhilfe: explizite Wiederimplementierung der Methoden in der Subklasse, wobei diese Methoden explizit die Methoden der Superklasse aufrufen class A { void func1() { void func2() { class B : protected A { void func2() {A::func2(); int main() { B b; b.func1(); // Kompilerfehler, protected b.func2(); // OK, public Der Bereichsoperator :: wird allgemein dann gebraucht, wenn explizit auf eine Klasse zugegriffen werden soll private/protected Vererbung wird selten verwendet evtl. ein Hinweis auf unsauberes OO-Design! 5

6 Vererbung (5) private/protected Vererbung wird selten verwendet evtl. ein Hinweis auf unsauberes OO-Design! Dementsprechend wurde es in Java auch weggelassen. Vererbung (6) Konstruktoren: Ist B eine Subklasse von A, dann passiert bei der Initialisierung einer Instanz der Klasse B folgendes: Zuerst wird der Default-Konstruktor der Klasse A aufgerufen. Dann wird der (der Initialisierung) entsprechende Konstruktor der Klasse B aufgerufen Um einen anderen als den Default-Konstruktor der Klasse A aufzurufen, muss dies im Konstruktor der Klasse B mit einem Basisinitialisierer explizit angegeben werden (Java: super(...)) Existiert der Default- oder explizit angegebene Konstruktor in der Klasse A nicht, gibt es einen Fehler beim Kompilieren Destruktoren werden in umgekehrter Reihenfolge zu den Konstruktor aufgerufen (zuerst der Destruktor von Klasse B, dann der von Klasse A) 6

7 Vererbung (7) Beispiel: Aufruf der Konstruktoren (ohne Basisinitialisierer) #include <iostream> // constructor1.cpp using namespace std; class A { A() {cout << "Constructor A()" << endl; A(int v) {cout << "Constructor A(" << v << ")" << endl; class B : public A { B() {cout << "Constructor B()" << endl; B(int v) {cout<<"constructor B(" <<v<<")"<< endl; int main() { A a; // Ausgabe: Constructor A() B b; // Ausgabe: Constructor A() Constructor B() A c(3); // Ausgabe: Constructor A(3) B d(5); // Ausgabe: Constructor A() Constructor B(5) Vererbung (6) Beispiel: Aufruf der Konstruktoren (mit Basisinitialisierer) #include <iostream> Datenelemente von A using namespace std; werden sofort richtig class A { initialisiert (ohne extra den Default A() {cout << "Constructor A()" << endl; Konstruktor aufzurufen A(int v) {cout << "Constructor A(" << v << ")" << endl; class B : public A { B() {cout << "Constructor B()" << endl; B(int v) : A(v) {cout<<"constructor B("<<v<<")" << endl; int main() { A a; // Ausgabe: Constructor A() B b; // Ausgabe: Constructor A() Constructor B() A c(3);// Ausgabe: Constructor A(3) B d(5);// Ausgabe: Constructor A(5) Constructor B(5) 7

8 Redefinieren von Elementen (1) Redefinition (von nicht virtuellen Methoden): Für die Namen von Datenelementen oder Methoden in der Subklasse gibt es 2 Möglichkeiten Name in der Superklasse nicht vorhanden keine Redefinition Name in der Superklasse vorhandenredefinition Ein in der Subklasse redefiniertes Element verdeckt das entsprechende Element/Methode in der Superklasse Redefinition und Überladung Bei der Redefinition (von nicht virtuellen Methoden) darf die Signatur und der Return-Typ beider Methoden verschieden sein. Eine Redefinition einer Methode verdeckt immer die gleichnamige Methode des Superklasse. In derselben Klasse dürfen Methoden aber überladen sein. Deshalb kann eine Methode der Superklasse mehrfach redefiniert werden. Redefinition von Methoden in Subklassen (1) Java & C++: Eine Methode einer Superklasse kann in einer Subklasse überladen werden Java: Eine Instanz der Subklasse kann die Methoden der Superklasse und die überladenen Methoden in der Subklasse einfach verwenden: // Overloading.java class Parent { public void test() {System.out.println("test()"); class Child extends Parent { public void test(int i) {System.out.println("test(int)"); public class Overloading { public static void main(string[] args) { Child c = new Child(); c.test(1); // Gibt test(int) aus c.test(); // Gibt test() aus 8

9 Redefinition von Methoden in Subklassen (2) Das gleiche Beispiel in C++: // overloading.cpp class Parent { void test () {cout << "test()" << endl; class Child : public Parent { void test(int i) {cout << "test(int)" << endl; int main() { Child c; c.test(1); c.test(); Beim Kompilieren mit g++ resultiert folgender Ausgabe: Name.cpp: In function `int main()': Name.cpp:11: error: no matching function for call to `Child::test()` Name.cpp:113: error: candidates are: void Child::test(int) Redefinition von Methoden in Subklassen (3) Grund für den Kompilierfehler: C++ geht bei der Namensauflösung wie folgt vor: 1. Suche die erste Klasse (beginnend mit der eigenen Klasse), in welcher der Name der aufgerufenen Methode auftritt test wird in der Klasse Child gefunden 2. Suche die Methode innerhalb dieser Klasse Child kennt test(int), nicht aber test() Kompilierfehler Abhilfe: Jede in Subklassen überladene Methode sollte dort neu definiert werden class Child : public Parent { void test() {Parent::test(); void test(int i) {cout << "test(int)" << endl; 9

10 Eine einfache Klassenhierarchie Um Vererbung und Polymorphismus im Detail zu besprechen, verwenden wir die folgende Klassenhierarchie: Auto Japanisches Auto Italienisches Auto Deutsches Auto Mazda Nissan Ferrari Fiat BMW Opel VW Wir beschränken uns auf die,,gelben" Klassen Implementierung in Java // AutoProg.java abstract class Auto { abstract public void marke(); public class ItalienischesAuto extends Auto { public void marke() {System.out.println("Macchina Italiana"); public void fahre250() {System.out.println("geht nicht"); public class Fiat extends ItalienischesAuto { public void marke() {System.out.println("Fiat"); public class Ferrari extends ItalienischesAuto { public void marke() {System.out.println("Ferrari"); public void fahre250() {System.out.println("250!"); 10

11 Implementierung in C++ // autoprog.cpp class Auto { Rein virtuelle Methode virtual void marke() = 0; class ItalienischesAuto : public Auto { virtual void marke() {cout << "Macchina Italiana" << endl; void fahre250() {cout << "geht nicht" << endl; class Fiat : public ItalienischesAuto { virtual void marke() {cout << "Fiat" << endl; class Ferrari : public ItalienischesAuto { virtual void marke() {cout << "Ferrari" << endl; void fahre250() {cout << "250!" << endl; Redefinieren von Elementen (1) Redefinieren von Elementen : Eine Subklasse implementiert eine Methode einer Superklasse,,neu". class Auto { virtual void marke() = 0; class ItalienischesAuto : public Auto { virtual void marke() {cout << "Macchina Italiana" << endl; void fahre250() {cout << "geht nicht" << endl; class Fiat : public ItalienischesAuto { virtual void marke() {cout << "Fiat" << endl; class Ferrari : public ItalienischesAuto { virtual void marke() {cout << "Ferrari" << endl; void fahre250() {cout << "250!" << endl; 11

12 Redefinieren von Elementen (2) Wird eine Methode überschrieben, ist die Methode der Superklasse in einer Instanz der Subklasse nicht mehr sichtbar und es wird die,,neue" Version der Methode verwendet: Ferrari f = new Ferrari(); // Java ItalienischesAuto ia = new ItalienischesAuto(); ia.marke(); // Macchina Italiana ia.fahre250(); // geht nicht f.marke(); // Ferrari f.fahre250(); // 250! Ferrari f; // C++ ItalienischesAuto ia; ia.marke(); // Macchina Italiana ia.fahre250(); // geht nicht f.marke(); // Ferrari f.fahre250(); // 250! Redefinieren von Elementen (3) Wenn in der Subklasse auf eine überschriebene Methode der Superklasse zugegriffen werden soll, kann man den Bereichsoperator:: verwenden. Aus der Klasse Ferrari kann damit die fahre250 Methode der Klasse ItalienischesAuto benutzt werden class Ferrari : public ItalienischesAuto {... void fahre250() { cout << "250!" << endl; ItalienischesAuto::fahre250(); Das entspricht der Funktionalität, die man mit dem Keyword super in Java erreicht. 12

13 Polymorphismus (1) Eines der wichtigsten Konzepte der OO Programmierung Polymorphismus: eine Variable vom Typ einer Superklasse kann irgendein Objekt vom Typ einer Subklasse beinhalten Anders gesagt: der statische Typ einer Variablen kann sich von dem dynamischen Typ (der Typ des Werts, den die Variable gerade enthält) unterscheiden Auto-Beispiel: Eine Variable vom Typ ItalienischesAuto (statischer Typ)... kann eine Variable vom Typ Ferrari (dynamischer Typ) enthalten Der Zusammenhang zwischen Polymorphismus und Redefinieren von Elementen ist ein wichtiger Aspekt von objektorientierten Programmiersprache In Java wird immer die Methode des dynamischen Typs angewendet In C++ wird das Verhalten durch den Programmierer bestimmt Polymorphismus (2) Polymorphismus in Java: Ferrari f = new Ferrari(); f.marke(); // Ferrari f.fahre250(); // 250! ItalienischesAuto ia = f; ia.marke(); // Ferrari ia.fahre250(); // 250! Java: Obwohl der statische Typ von ia ItalienischesAuto ist, werden die Methoden des dynamischen Typs (Ferrari) verwendet! In Java ist das immer so und kann auch nicht vom Programmierer beeinflusst werden 13

14 Polymorphismus (3) Polymorphismus in C++ mit Zuweisung von Objekten: Ferrari f; f.marke(); // Ferrari f.fahre250(); // 250! ItalienischesAuto ia = f; ia.marke(); // Macchina Italiana ia.fahre250(); // geht nicht Werden Objekte einander zugewiesen, so werden immer die Methoden des statischen Typs (ItalienischesAuto) verwendet in diesem Fall existiert gar kein Polymorphismus Bei der Zuweisung werden keine Zeiger kopiert, sondern immer die Objekte selbst. Weil ein Objekt vom Typ Ferrari in einem Objekt vom Typ ItalienischesAuto,,keinen Platz" hat, fallen die Erweiterungen der Klasse Ferrari weg Dadurch wird das Objekt in ein ItalienischesAuto konvertiert und verhält sich auch genau so Polymorphismus (4) Polymorphismus in C++ mit Zuweisung von Zeigern: Ferrari f; f.marke(); // Ferrari f.fahre250(); // 250! ItalienischesAuto *ia = &f; ia->marke(); // Ferrari ia->fahre250(); // geht nicht < Werden statt Objekte Zeiger zugewiesen, so wird die Methode des dynamischen Typs (Ferrari) verwendet, wenn die entsprechende Methode als virtual definiert wurde (marke) Andernfalls wird die Methode des statischen Typs (Italienisches Auto) verwendet (fahre250) Polymorphismus in C++ entspricht also Polymorphismus in Java, wenn: Mit Zeigern gearbeitet wird Und wenn alle Methoden, die redefiniert werden sollen, als virtual definiert werden. 14

15 Polymorphismus (5) Polymorphismus funktioniert natürlich auch auf dem Heap, wo,,automatisch" mit Zeigern gearbeitet wird: Ferrari *f = new Ferrari(); f->marke(); // Ferrari f->fahre250(); // 250! ItalienischesAuto *ia = f; ia->marke(); // Ferrari ia->fahre250(); // geht nicht < Weil Referenzen nichts anderes als Zeiger sind, funktioniert Polymorphismus auch mit Referenzen: f.marke(); // Ferrari f.fahre250(); // 250! ItalienischesAuto &ia = f; ia.marke(); // Ferrari ia.fahre250(); // geht nicht < Polymorphismus (6) Redefinition von virtuellen Methoden In einer Subklasse wird eine virtuelle Methode redefiniert, wenn die Methode in der abgeleiteten Klasse dieselbe Signatur denselben Ergebnistyp wie die virtuelle Methode des Basisklasse hat. Wird eine virtuelle Methode in einer abgeleiteten Klasse mit einer anderen Signatur oder einem anderen Ergebnistyp redefiniert, so wird lediglich eine neue Methode mit gleichem Namen eingeführt und diese ist nicht virtuell. 15

16 Polymorphismus (7) Bei Polymorphismus spricht man oft von early binding (statische Bindung) und late binding (dynamische Bindung) Early binding: bereits während des Kompilierens weiss man, welche Methode ausgeführt werden wird (statischer Typ): ia.marke(); Late binding: erst zur Laufzeit kennt man den dynamischen Typ und dadurch die entsprechende Methode: ia->marke(); Eine Methode, die in einer Superklasse nicht virtuell ist, kann in Subklassen nicht virtuell gemacht werden Ebenso bleibt eine virtuelle Methode immer virtuell, auch wenn in Subklassen das virtual Keyword nicht angegeben wird (in diesem Fall ist das Keyword virtual also optional) Wie in Java gibt es in C++ abstrakte Klassen (Auto in unserer Hierarchie) Können nicht instanziert werden Enthalten eine (oder mehrere) pure virtuelle Methoden: virtual, kein Body, dafür =0 am Ende, z.b. Methode marke() Redefinieren von Elementen (5) Erweitern wir die Klasse ItalienischesAuto um markefahre250: class ItalienischesAuto : public Auto { virtual void marke() {cout << "Macchina Italiana" << endl; void fahre250() {cout << "geht nicht" << endl; void markefahre250() {marke(); fahre250(); Testprogramm Ferrari f; f.marke(); // Ferrari f.fahre250(); // 250! f.markefahre250() // Ferrari geht nicht Direkter Aufruf von marke und fahre250: Methoden von Ferrari werden ausgeführt Indirekter Aufruf (via markefahre250) Bei marke wird die Methode der Klasse Ferrari ausgeführt Bei fahre250 wird die Methode von ItalienischesAuto ausgeführt 16

17 Redefinieren von Elementen (6) Erklärung: das liegt daran, ob die Methoden virtuell sind oder nicht: markefahre250 ist eine Methode von ItalienischesAuto markefahre250 ruft deshalb ebenfalls die Methoden marke und fahre250 von ItalienischesAuto auf fahre250 ist nicht virtuell es wird immer die Methode von ItalienischesAuto aufgerufen, egal ob markefahre250 für eine Variable vom Typ ItalienischesAuto oder einer Subklasse (Ferrari) ausgeführt wird marke ist virtuelldie Methode des Typs der Variablen (Ferrari) ausgeführt Auch hier verhält sich C++ wie Java, wenn in C++ alle Methoden virtuell sind Polymorphismus (7) In C konnte der Code nur in eine Richtung erweitert werden: neuer Code ruft alten Code auf Polymorphismus ist ein objekt-orientierte Ansatz und erlaubt das alter Code ruft neuen Code auf 17

18 Polymorphismus (7)!" # # $ Die richtige Funktion wird NICHT aufgerufen! Ausgabe In Base::f(int x) In Base::f(int x) Polymorphismus (8)!" # # $ Polymorphe Funktion Derived::f redefiniert Base::f Die richtige Funktion wird aufgerufen Ausgabe In Base::f(int x) In Derived::f(int x) 18

19 Polymorphismus (9)!" # # $ Alter Code ruft neuen Code Zum Zeitpunkt der Erstellung von # muss die Klasse noch nicht existiert haben! Übung 1 zu Vererbung und Polymorphismus class Monster { virtual void augen(){cout<<":"; virtual void nase (){cout<<'-'; virtual void mund (){cout<<' '; void zeige() { augen(); nase(); mund(); cout << endl; Monster Beisser Vampir class Beisser : public Monster { virtual void mund() { cout<<'x'; virtual void beiss() { cout<<"beiss beisser"<<endl; class Vampir : public Beisser { virtual void augen() { cout<< "8"; virtual void mund() { cout << '#'; virtual void beiss() { cout<<"beiss vampir"<<endl; 19

20 Übung 1 zu Vererbung und Polymorphismus class Monster { virtual void augen(){cout<<":"; virtual void nase (){cout<<'-'; virtual void mund (){cout<<' '; void zeige() { augen(); nase(); mund(); cout << endl; Monster m; m.zeige(); Beisser b; b.zeige(); Vampir v; v.zeige(); m = v; m.zeige(); m = b; m.zeige(); // :- // :-X // 8-# // :- // :- class Beisser : public Monster { virtual void mund() { cout<<'x'; virtual void beiss() { cout<<"beiss beisser"<<endl; class Vampir : public Beisser { virtual void augen() { cout<< "8"; virtual void mund() { cout << '#'; virtual void beiss() { cout<<"beiss vampir"<<endl; Übung 1 zu Vererbung und Polymorphismus class Monster { virtual void augen(){cout<<":"; virtual void nase (){cout<<'-'; virtual void mund (){cout<<' '; void zeige() { augen(); nase(); mund(); cout << endl; Beisser* pb = new Beisser; Vampir* pv = new Vampir; pb->zeige(); pb->beiss(); pv->zeige(); pv->beiss(); pb = pv; pb->zeige(); pb->beiss(); // :-X // beiss beisser // 8-# // beiss vampir // 8-# // beiss vampir class Beisser : public Monster { virtual void mund() { cout<<'x'; virtual void beiss() { cout<<"beiss beisser"<<endl; class Vampir : public Beisser { virtual void augen() { cout<< "8"; virtual void mund() { cout << '#'; virtual void beiss() { cout<<"beiss vampir"<<endl; Zusatzfrage: Was verändert sich, wenn mund nicht virtual ist? 20

21 Downcasting Downcasting bedeutet die Konvertierung einer polymorphen Variablen in ihren dynamischen Typ In Java gibt es einen Check zur Laufzeit, ob ein Objekt wirklich korrekt konvertiert wird: ItalienischesAuto ia = new Fiat(); Fiat ft = (Fiat) ia; // Korrekt Ferrari fe = (Ferrari) ia; // Generiert eine ClassCastException In C++ gibt es keinen solchen Check: ItalienischesAuto *ia = new Fiat(); Fiat *ft = (Fiat*) ia; // Korrekt Ferrari *fe = (Ferrari*) ia; // Verhalten nicht definiert In Java kann man mit instanceof den dynamischen Typ herausfinden: ItalienischesAuto ia = new Fiat(); if (ia instanceof Fiat) { Fiat ft = (Fiat) ia;... Dynamische Typumwandlung C++: kein instanceof, dafür ein spezieller Konvertierungstyp, der dynamische Cast dynamic cast < > Der Dynamic Cast prüft die Gültigkeit der Konvertierung und gibt im Fehlerfall den Wert NULL zurück: ItalienischesAuto *ia = new Fiat(); Fiat *ft = dynamic_cast<fiat*>(ia); if (ft) {... // Cast gültig else { // Cast nicht gültig (ft == NULL) Ein Dynamic Cast funktioniert nur, wenn die entsprechende Variable polymorph ist, das heisst: Wenn ein Zeiger auf das Objekt verwendet wird Wenn die Klasse mindestens eine virtuelle Methode enthält 21

22 Statische Typumwandlung Es gibt auch einen static_cast: dabei wird der dynamische Typ nicht geprüft und es müssen keine Zeiger verwendet werden Sehr ähnlich wie ein,,normaler" Cast wie z.b. (Ferrari*) oder (int) Der Static Cast prüft jedoch den statischen Typeine Konvertierung von int* zu int oder unterschiedlichen Klassenhierarchien wird verhindert. Ist dem normalen Cast vorzuziehen. Beispiel für normale Casts und statischen Typumwandlung void* v =...; // Wir wissen, dass v auf einen Ferrari zeigt. Ferrari *fe = static_cast<ferrari*>(v); int *pi = new int; *pi = 12; int b = (int) pi; //normaler Cast int* -> int: OK, aber f int c = static_cast<int>(pi); //Static Cast *int->int Kompilierfehler double d = 3.14; int e = static_cast<int>(d); // Static Cast double ->int OK Virtuelle Destruktoren (1) Im Zusammenhang mit Polymorphismus und Objekten auf dem Heap stellt sich die Frage, ob ein Destruktor virtuell deklariert werden soll Erweiterung unserer Hierarchie mit Destruktor: class Auto { virtual ~Auto() {cout << "Bye bye Auto" << endl;... class Ferrari : public ItalienischesAuto { ~Ferrari() {cout << "Ciao Ferrari" << endl; Testprogramm: ItalienischesAuto *ia = new Ferrari(); delete ia; // Ausgabe: Ciao Ferrari, Bye bye Auto Also gilt: Mit einem virtuellen Destruktor werden alle Destruktoren von unten nach oben ab dem dynamischen Typ (Ferrari) ausgeführt 22

23 Virtuelle Destruktoren (2) Ist der Destruktor der Klasse Auto nicht virtuell, wird nur der Destruktor von Auto ausgeführt: ItalienischesAuto *ia = new Ferrari(); delete ia; // Ausgabe: Bye bye Auto Es werden also von unten nach oben nur die Destruktoren ab dem statischen Typ (ItalienischesAuto) ausgeführt Hat Auto gar keinen Destruktor (ItalienischesAuto auch nicht), dann wird gar kein Destruktor ausgeführt: ItalienischesAuto *ia = new Ferrari(); delete ia; // Keine Ausgabe Rule of Thumb: Ein Destruktor sollte dann virtuell deklariert werden, wenn es mindestens eine andere virtuelle Methode hat Auch dann, wenn der Destruktor,,nichts tut Sonst besteht die Gefahr, dass Destruktoren von Subklassen nicht ausgeführt werden Operator überladen und Vererbung (1) Überladene Operatoren werden vererbt #include <iostream> using namespace std; class Point2D { double x, y; Point2D& operator++() { ++x; ++y; return *this; Point2D() { x = y = 1; friend ostream& operator<< (ostream&, const Point2D&); class Point3D : public Point2D { double z; ostream& operator<<( ostream& o, const Point2D& c ) { o << c.x << " " << c.y << endl; return o; 23

24 Operator überladen und Vererbung (2) Testprogramm: Point3D c; ++c; // x, y (von Point2D) werden inkrementiert, nicht aber z cout << c; // Aufgabe von x, y, aber nicht z Point3D erbt die Operatoren von Point2D, wobei folgendes dahinter steckt: Der ++ Operator ist eine,,normale" Methode und wird darum vererbt. Der einzige Parameter vom ++ Operator (Point2D) ist eine Superklasse von Point3D. Darum funktioniert die Methode auch mit Point3D Der << Operator ist als Funktion implementiert und damit nicht Teil einer Klasse: Womit die Funktion auch nicht vererbt wird. Point3D kann die Funktion verwenden, weil wiederum Point3D eine Subklasse von Point2D ist Operator überladen und Vererbung (3) Für die gewünschte Funktionalität für Point3D können die Operatoren als Methode/Funktion neu implementiert werden: class Point3D : public Point2D { double z; Point3D& operator++() { ++x; ++y; ++z; return *this; friend ostream& operator<< (ostream&, const Point3D&); ostream& operator<<( ostream& o, const Point3D& c ) { o << c.x << " " << c.y << << c.z << endl; return o; Testprogramm: Point3D c; ++c; // x, y und z werden inkrementiert cout << c; // z.b. Ausgabe:

25 Operator überladen und Vererbung (4) Der << Operator ist nun zweimal als Funktion definiert (für Point2D und Point3D). Weil die Funktionen aber verschiedenen Signaturen haben, ist dies kein Problem. Polymorphismus gilt auch für überladene Operatoren, die als Methode implementiert sind. Wie bei normalen Methoden müssen diese als virtuell deklariert werden, damit Polymorphismus überhaupt funktionieren kann. Polymorphismus mit ++ Operator in der Klasse Point2D virtual Point2D& operator++() { ++x; ++y; return *this; Mit Operatoren, die als Funktion ausserhalb von Klassen überladen sind, funktioniert Polymorphismus nicht. Mehrfachvererbung (1) C++: Eine Klasse kann von mehreren Superklassen abgeleitet werden Mehrfachvererbung Wenn möglich sollte Mehrfachvererbung vermieden werden (fehleranfällig, verwirrend), dennoch kann es nützlich sein... Und man sollte zumindest die Grundidee verstanden haben. Die Subklasse erbt die Eigenschaften aller Superklassen. Prinzipiell ist Mehrfachvererbung auch ziemlich problemlos, schwieriger wird es aber, wenn folgendes auftritt: Zwei oder mehr Superklassen haben eine Methode mit der gleichen Signatur oder eine Methode a() Subklasse Klasse A Klasse B1 Klasse B2 Subklasse Methode a() Instanzvariable mit dem gleichen Namen welche soll jetzt in der Subklasse verwendet werden? Zwei oder mehr Superklassen haben wiederum die gleiche Superklasse, die Klasse und deren Eigenschaften wären jetzt doppelt vorhanden 25

26 Mehrfachvererbung (2) Beispiel mit Klasse Werwolf, die von Monster und Wolf abstammt: Monster Wolf class Monster { void erschrecken() {cout << "buuuuhh!" << endl; class Wolf { void heulen() {cout << "heuuull!" << endl; class Werwolf : public Monster, public Wolf { int main() { Werwolf ww; ww.erschrecken(); // buuuuhh ww.heulen(); // heuuull! Werwolf Mehrfachvererbung (3) Erweiterung: Wolf implementiert eine Methode erschrecken: class Monster { void erschrecken() {cout << "buuuuhh!" << endl; class Wolf { void erschrecken() {cout << "fletsch!" << endl; void heulen() {cout << "heuuull!" << endl; class Werwolf : public Monster, public Wolf { int main() { Werwolf ww; ww.erschrecken; // Kompilierfehler ww.monster::erschrecken(); // buuuuhh! ww.wolf::erschrecken(); // fletsch! ww.heulen(); // heuuull! Werden mehrere Methoden (oder Instanzvariablen) mit der gleichen Signatur geerbt, so muss die Methode beim Aufruf eindeutig spezifiziert werden! Klasse:: 26

27 Mehrfachvererbung (4) Mehrfachvererbung mit gemeinsamer Basisklasse: class Monster { protected: int opfer; Monster() : opfer(0) { void erschrecken() { cout<<"buuuuhh!"<<endl; class Beisser : public Monster{ void friss() {opfer++; class Zombie : public Monster{ void friss() {opfer++; class Vampir : public Beisser, public Zombie { Monster Beisser Vampir Monster Zombie int main() { Vampir dracula; dracula.friss(); //Kompilierfehler! dracula.erschrecken();//kompilierf. // Kompilierfehler! dracula.monster::erschrecken(); // buuuuhh! dracula.beisser::erschrecken(); // buuuuhh! dracula.zombie::erschrecken(); dracula.beisser::friss(); dracula.zombie::friss(); Mehrfachvererbung (4) Mehrfachvererbung mit gemeinsamer Basisklasse: class Monster { Monster Monster protected: int opfer; Beisser Zombie Vampir Monster() : opfer(0) { void erschrecken() Auch { hier gilt: Methoden int main() { cout<<"buuuuhh!"<<endl; (oder Instanzvariablen) Vampir dracula; müssen eindeutig dracula.friss(); //Kompilierfehler! class Beisser : public spezifiziert Monster{ werden! dracula.erschrecken();//kompilierf. Klasse:: // Kompilierfehler! void friss() {opfer++; dracula.monster::erschrecken(); // buuuuhh! class Zombie : public Monster{ dracula.beisser::erschrecken(); // buuuuhh! void friss() {opfer++; dracula.zombie::erschrecken(); dracula.beisser::friss(); class Vampir : public Beisser, dracula.zombie::friss(); public Zombie { 27

28 Mehrfachvererbung (5) Virtuelle Mehrfachvererbung bewirkt, dass eine gemeinsame Basisklasse nur einmal vererbt wird Dazu wird das Keyword virtual verwendet: Hat nichts mit dem virtual bei virtuellen Methoden zu tun (shared wäre hier wohl besser gewesen) Beisser Monster Vampir Zombie Dadurch ist eine genauere Bezeichnung der verwendeten Methoden und Instanzvariable der gemeinsamen Basisklasse Monster nicht mehr nötig Zugriffe auf Methoden mit gleichen Signaturen oder Instanzvariablen mit dem gleichen Namen in den Klassen Beisser und Zombie müssen aber immer noch eindeutig spezifiziert werden! Auf Einfachvererbung oder Mehrfachvererbung ohne gemeinsame Basisklasse hat das Keyword virtual keinen Einfluss Mehrfachvererbung (6) Monster - Beisser - Zombie - Vampir mit virtual Vererbung class Monster { protected: int opfer; Monster() : opfer(0) { void erschrecken() { cout<<"buuuuhh!"<<endl; class Beisser : public virtual Monster{ void friss() {opfer++; class Zombie : public virtual Monster{ void friss() {opfer++; class Vampir : public Beisser, public Zombie { Beisser Monster Vampir Zombie Eine virtuelle Superklasse wirkt sich erst bei Mehrfachvererbung aus bleibt auch bei weiteren Ableitungen virtuell, so besitzt jede von Beisser abgeleitete Klasse die Klasse Monster ebenfalls als virtuelle Basisklasse. 28

29 Mehrfachvererbung (7) Monster - Beisser - Zombie - Vampir mit virtual Vererbung class Monster { protected: int opfer; Monster() : opfer(0) { int main() { void erschrecken() { cout<<"buuuuhh!"<<endl; Vampir dracula; dracula.friss(); //Kompilierfehler! dracula.erschrecken();//buuuuhh! class Beisser : public virtual Monster{ dracula.monster::erschrecken();//buuuuhh! void friss() {opfer++; dracula.beisser::erschrecken();//buuuuhh! dracula.zombie::erschrecken();//buuuuhh! class Zombie : public virtual dracula.beisser::friss(); Monster{ //Beisser notwendig dracula.zombie::friss(); //Zombie notwendig void friss() {opfer++; class Vampir : public Beisser, public Zombie { Zusammenfassung In C++ gibt es public, protected und private Vererbung, womit die Sichtbarkeit von Instanzvariablen und Methoden in Subklassen eingeschränkt werden kann Beim Redefinieren von Methoden implementiert eine Subklasse eine Methode einer Superklasse neu; dadurch ist die alte Methode in der Subklasse nicht mehr sichtbar. Polymorphismus bedeutet, dass eine Variable vom Typ einer Superklasse irgendeinevariable vom Typ einer Subklasse beinhalten kann Werden Objekte (und nicht Zeiger) zugewiesen, so werden immer die Methoden des statischen Typs der Variablen verwenden Werden Zeiger auf Objekte zugewiesen, so werden die Methoden des dynamischen Typs verwendet, wenn die entsprechende Methode als virtual definiert wurde Mit einem Dynamic Cast kann eine polymorphe Variable in ihren dynamischen Typ konvertiert werden Überladene Operatoren werden auch vererbt C++ unterstützt Mehrfachvererbung 29

9. Vererbung und Polymorphismus

9. Vererbung und Polymorphismus C und C++ (CPP) 9. Vererbung und Polymorphismus Prof. Dr. Marc Rennhard Institut für angewandte Informationstechnologie InIT ZHAW Zürcher Hochschule für angewandte Wissenschaften marc.rennhard@zhaw.ch

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 verstehen wie Polymorphismus

Mehr

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung K05 Vererbung & Polymorphie in C++ 1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung 2 Vererbung in C++: Grundlagen Analog zu Java unterstützt C++ das Konzept der Vererbung:

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 / 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

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

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

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

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

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

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

01. Grundprinzipien der Vererbung

01. 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

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

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

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

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0 9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung

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

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

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

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

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

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Einführung in die objektorientierte Programmierung Teil 2 2 Übersicht der heutigen Inhalte Vererbung Abstrakte Klassen Erweitern von Klassen Überladen von Methoden Überschreiben von

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

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

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

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

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

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

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

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

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben 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

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs 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

Vererbung. Martin Wirsing. Ziele. Vererbung

Vererbung. Martin Wirsing. Ziele. Vererbung 2 Ziele Martin Wirsing en Begriff der einfachen verstehen und Redefinition von Oberklassenmethoden verstehen spolymorphie verstehen ie Klasse Object kennenlernen in Zusammenarbeit mit Michael Barth, Philipp

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

Ü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

Ü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

Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 12. Vererbung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Vererbung Konzept!Protected Section!Virtuelle Mitgliedsfunktionen!Verwendung von Vererbung Copyright: M. Gross, ETHZ, 2003 2 Vererbung!

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

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

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

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

Programmierung Nachklausurtutorium

Programmierung Nachklausurtutorium Programmierung Nachklausurtutorium Laryssa Horn, Tim Engelhardt 20 März 2018 Klassen Wofür wir Klassen brauchen: Definieren ein Bauplan eines Objektes Bauplan enthält Attribute und Methoden Klasse Beispiel

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

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

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

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

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

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern Thema Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern Referent: Frank Sanders Seite 1 Inhalt Der Vortrag hat einen sehr kurzen Einleitungsteil der sich mit Objektorientierung

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

Die abstrakte Klasse Expression:

Die 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

Mehr

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 12. Vererbung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Vererbung Konzept!Protected Section!Virtuelle Mitgliedsfunktionen!Verwendung von Vererbung Copyright: M. Gross, ETHZ, 2003 2 Vererbung!

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

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 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,

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

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

Innere 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 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

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

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

Abstrakte Basisklassen

Abstrakte Basisklassen Abstrakte Basisklassen Softwareentwicklung II (IB) Prof. Dr. Oliver Braun Letzte Änderung: 24.06.2018 15:20 Abstrakte Basisklassen 1/18 Idee (1/2) Gegensätze: Interfaces ausschließlich Methodenköpfe, keine

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 13 Einstieg in die Informatik mit Java Schnittstellen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 13 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung

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

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

Einführung in die Systemprogrammierung

Einführung in die Systemprogrammierung Einführung in die Systemprogrammierung Virtuelle Methodentabellen Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 9. Juli 2015 Struktur der Objektorientierung Ein wenig Java: public

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Informatik II Übung 06. Benjamin Hepp 5 April 2017 Informatik II Übung 06 Benjamin Hepp benjamin.hepp@inf.ethz.ch 5 April 2017 Nachbesprechung U5 5 April 2017 Informatik II - Übung 01 2 Nachbesprechung U5 1. Einfach verkettete Listen Keine Probleme 2.

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

Algorithmen und Datenstrukturen 07

Algorithmen und Datenstrukturen 07 (7. Juni 2012) 1 Besprechung Blatt 6 Fragen 2 Referenzen Referenzsemantik 3 Vererbung Allgemein abstract Interfaces Vererbung in UML 4 Vorbereitung Blatt 7 Anmerkungen Fragen Fragen zu Blatt 6? Referenzsemantik

Mehr

Abstrakte Basisklassen

Abstrakte Basisklassen Softwareentwicklung II (IB) Abstrakte Basisklassen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 24.06.2018 15:20 Inhaltsverzeichnis Idee.........................................

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

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

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

Theorie zu Übung 8 Implementierung in Java

Theorie 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

Mehr

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmierkurs 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

Mehr

Programmierkurs Java

Programmierkurs 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

Mehr

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Vererbung 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

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

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

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

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces 10 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Interfaces Aber: Mehrfachvererbung von Klassen ist in Java nicht erlaubt. Ausweg Definition eines Interfaces, z.b.:

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

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

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

Vererbung. Definition Felder Konstruktor Methoden Beispiel. Dr. Beatrice Amrhein

Vererbung. Definition Felder Konstruktor Methoden Beispiel. Dr. Beatrice Amrhein Vererbung Definition Felder Konstruktor Methoden Beispiel Dr. Beatrice Amrhein Definition 2 Definition: Vererbung Die Vererbung dient dazu, mit Hilfe von existierenden Klassen neue Klassen zu implementieren.

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

Ü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

Ü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

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

Informatik II Übung 6

Informatik 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,

Mehr

Einführung in die Programmierung Wintersemester 2008/09

Einführung in die Programmierung Wintersemester 2008/09 Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Virtuelle Methoden Vererbung bisher: Definition

Mehr

JAVA 05: Objektorientierte Konzepte

JAVA 05: Objektorientierte Konzepte Lernkartenkurs JAVA 05: Objektorientierte Konzepte panitz Zusammenfassung Dieser Kurs beschäftigt sich mit Grundkonzepten der objektorientierten Programmierung. Was sind Klassen und Objekte? Wie sehen

Mehr

4. Vererbung Die Klasse Object. Die Klasse Object

4. Vererbung Die Klasse Object. Die Klasse Object 4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige

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