• Keine Ergebnisse gefunden

mensch *pMensch

N/A
N/A
Protected

Academic year: 2021

Aktie "mensch *pMensch"

Copied!
14
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Wie bekommen Basisklassen ihren initialen Werten?

(2)

Frage: Wie werden Konstruktoren und Destruktoren in Basisklassen aufgerufen?

In welcher Reihenfolge werden

Konstruktoren und Destruktoren in Basis- und abgeleiteten Klassen aufgerufen?

(3)

Antwort: Konstruktoren werden in der Reihenfolge der Ableitung

aufgerufen

Destruktoren in der umgekehrten Reihenfolge

(4)

Die Parameter für die Basisklasse müssen von dem Basisklasse-

Konstruktor weitergegeben werden Die Basisklasse muss vor der

abgeleiteten Klasse initialisiert werden

Die Basisklasse muss nach der abgeleiteten Klasse zerstört

werden

(5)

Erst wenn der Konstruktor der Basisklasse fertig ist wird der Konstruktor der abgeleiteten Klasse aufgerufen

Es können Abhängigkeiten zwischen Variablen der

Basisklasse und der abgeleiteten Klasse entstehen

Bei längeren Vererbungsketten gelten die gleichen Regeln

(6)

<abgel_Konstruktor>(<argListe1>) :

<Basisklasse>(<argListe2>){...}

(7)

student(i,j,s, l, t, b):

mensch(l, t, b) {

studentID = i;

semester = j;

matrikulationsdatum = s;

}

(8)

Bei public-Vererbung:

Eine abgeleitete Klasse wird per Default zum Basistyp umgewandelt (ohne Cast) Ein Zeiger auf eine abgeleitete Klasse wird per Default zum Zeiger auf die

Basisklasse umgewandelt (ohne Cast) Ein Zeiger auf eine Methode der

abgeleiteten Klasse wird per Default zum Zeiger der Methode in der Basisklasse umgewandelt (ohne Cast)

(9)

...

mensch *pMensch;

student *qStudent;

student einStudent;

mensch einMensch;

pMensch = &einMensch;

qStudent = &einMensch;

qStudent = &einStudent;

cout << qStudent->getAge() << endl;

...

(10)

Umgekehrt ist die

Typumwandlung, d.h. die

Zuweisung eines Zeigers auf eine Basisklasse mit einem Zeiger auf eine abgeleitete Klasse, nur mit einem Cast möglich

Diese Art Zuweisung kann gefährlich werden

(11)

mensch *pMensch = new student;

student *qStudent = (student *) pMensch;

qStudent->getStudentID();

ist korrekt, aber:

mensch *pMensch = new mensch;

student *qStudent = (student *) pMensch;

qStudent->getStudentID();

führt zum Programmabsturz!!

(12)

Müssen vom Programmierer geschrieben werden

Erfolgen durch Überladung des Cast-Operators

(13)

class student : public mensch{

...

public:

operator char *();

...

};

(14)

Syntax des Cast-Operators genau beachten!

Konstruktoren, Destruktoren und Zuweisungsoperatoren können nicht vererbt werden

"Casts are to C++ programmers what the apple was to Eve" (Scott Myers)

Referenzen

ÄHNLICHE DOKUMENTE

Implementieren Sie eine Basisklasse Account und Spezialisierungen für Girokonten (Klasse GiroAccount ), Sparkonten (Klasse SavingsAccount) und Kreditkonten

Durch die Ableitung einer Klasse entsteht eine speziali- sierte Klasse, welche (mit Einschränkungen) die Elementvariablen und Elementfunktionen der Basisklasse erbt, aber darüber

• Algorithmen, die auf Basisklasse operieren, k¨ onnen auch auf den abgeleiteten Klassen operieren. • Beispiel: Liste, die Pointer auf GeomObject

– Light: Virtuelle Basisklasse f¨ ur Lichtquellen. Die abgeleiteten Klassen PointLight und Di- rectionalLight sind bereits vollst¨ andige implementiert..

Nennen Sie ein Beispiel für eine Basisklasse mit einem Attribut und einer Methode und erstellen sie zwei Objekte dieser Klasse?. Hund mit Rasse und was frisst der Hund, sowie

Am Ende von reagiere wird die abstrakte Methode reaktion gerufen, welche in den abgeleiteten Klassen die eigentliche Reaktion zwischen den beiden Figuren vornimmt..

Des weiteren versucht der PHP Interpreter, automatisch die Implementierung einer Methode der Basisklasse aufzurufen, wenn auf einem Objekt diese Methode nicht

großer Zeiger Minuten kleiner Zeiger Stunden roter kleiner Zeiger Sekunden..