Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung...

28
Lehrstuhl für Datenverarbeitung Fakultät für Elektrotechnik und Informationstechnik Technische Universität München Grundkurs C++ Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019 Folie 1/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Transcript of Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung...

Page 1: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Grundkurs C++

Typwandlung & Fehlerbehandlung

Martin Gottwald und Stefan Röhrl

05. Juni 2019

Folie 1/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 2: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Teil I

Typwandlung und const-Eigenschaft

Folie 2/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 3: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Schlüsselwort „const“

int a = 5;

const int b = 3;

a = 2; // in Ordnung

b = 4; // Fehler: const-Variable kann nicht verändert werden

Folie 3/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 4: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

const-Zeiger

const int* pX; // Zeiger auf const int

*pX = 3; // Nicht möglich

pX = &y; // Zeiger auf andere Variable

// zeigen zu lassen ist möglich

int* const pY; // const-Zeiger auf int

*pY = 4; // in Ordnung

pY = &z; // Zeiger kann nicht auf

// andere Variablen zeigen

const int* const pZ; // const-Zeiger auf const int

*pZ = 3;pZ = &w; // beides nicht möglich

Folie 4/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 5: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

const bei Methoden

class Test {

public:

Test(int i) {

m_i = i;

};

~Test();

const int* GetI() const { // Methode ändert keine

return &m_i; // Attribute des Objekts

};

private:

int m_i;

};

Folie 5/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 6: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Referenzen

void swap(int& i, int& j) {

int tmp = i;

i = j;

j = tmp;

}

int main() {

int x, y;

swap(x,y);

return 0;

}

Referenzen sind keine Kopien oder

Pointer auf ein Objekt, sondern das

Objekt selbst.

Folie 6/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 7: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Referenzen

Eine einmal erzeugte Referenz kann nicht mehr auf ein anderes Objekt

„verschoben“ werden.

Referenzen können nicht „null“ sein.

Referenzen können nicht uninitialisiert sein:

int& rA; // falsch

int A = 3;

int& rA = A; // richtig

Folie 7/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 8: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Standard-C-Casting

int main() {

int a = 3;

int b = 4;

float c = a/b;

float d = (float)a/b;

unsigned long e = (unsigned long)a;

}

C++ ist typsicher

Typumwandlung ist fehleranfälligI mit Bedacht verwendenI auffindbar machenI den Compiler mithelfen lassen

Folie 8/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 9: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Typumwandlung à la C++

die Wandlung zum Beruhigen des CompilersI ersetzt Wandlung zwischen Standardtypen und implizite WandlungI sagt dem Compiler, dass man Informationsverlust in Kauf nimmt

(z. B. double → int)I Schlüsselwort static_cast<type>(...)

entlang von KlassenhierarchienI Schlüsselwort dynamic_cast<type>(...)

Daten anders interpretieren als üblichI Schlüsselwort reinterpret_cast<type>(...)

Aufheben der const-EigenschaftI Schlüsselwort const_cast<type>(...)

Folie 9/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 10: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

static_cast

int main() {

int i = 1234;

long l;

float f;

// Konvertierung ohne cast:

l = i;

f = i;

// oder mit cast:

l = static_cast<long>(i);

f = static_cast<float>(i);

}

Folie 10/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 11: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

static_cast

// Verlustbehaftete Konvertierung

i = l; // Hier koennen Stellen verloren gehen

i = f; // Hier kann Genauigkeit verloren gehen

// sagt „ich weiß“, eliminiert Warnungen

i = static_cast<int>(l);

i = static_cast<int>(f);

char c = static_cast<char>(i);

Folie 11/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 12: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

const_cast

class Foo {

public:

void func() {} // a non-const member function

};

void someFunction(const Foo& f) {

f.func(); // Compiler-Fehler!

Foo &fRef = const_cast<Foo&>(f);

fRef.func(); // okay

}

Folie 12/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 13: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

const_cast

#include <iostream>

struct type {

int i;

type(): i(3) {}

void f(int v) const {

// compile error: this is a pointer to const

// this->i = v;

// OK as long as the type object isn't const

const_cast<type*>(this)->i = v;

}

};

Folie 13/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 14: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

const_cast

int main(){

int i = 3; const int& rci = i;

const_cast<int&>(rci) = 4; // OK: modifies i

type t;

t.f(4); // if const type t then t.f(4) undefined behavior

const int j = 3; int* pj = const_cast<int*>(&j);

// *pj = 4; // undefined behavior

void (type::* pmf)(int) const = &type::f;

// compile error: const_cast does not work on function pointers

// const_cast<void(type::*)(int)>(pmf);

}Folie 14/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 15: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

dynamic_cast

void meineFunktion(Auto* meinAuto) {

Cabrio* meinCabrio = dynamic_cast<Cabrio*>(meinAuto);

if (meinCabrio != NULL)

meinCabrio->verdeckOeffnen();

else

std::cerr << "Kein Cabrio!" << std::endl;

meinAuto->bremsen(); //Klappt immer!

}

Folie 15/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 16: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

dynamic_cast

B *b_ptr = dynamic_cast<B*> object_ptr;

gibt 0 zurück, wenn es nicht klappt

Upcast geht immer

Downcast gelingt nur, wenn object_ptr tatsächlich auf ein Objekt von

richtigem Typ zeigt

vtable muss angelegt sein (d. h. die Basisklasse muss eine virtuelle Methode

besitzen)

Umwandlung von einer Kindklasse in eine andere wird scheitern

Folie 16/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 17: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

reinterpret_cast

int i = 25;

float *fp = reinterpret_cast<float*>(i);

// Zeigt auf einen wahrscheinlich undefinierten Float

// an Speicheradresse 25

mächtigster Cast-Operator

Variablen werden „uminterpretiert“, das Ergebnis ist nur in den wenigsten

Fällen direkt nutzbar → Rückcasting i. d. R. erforderlich

geeignet für bitweise Modifikationen

sehr fehleranfällig, nur in wohlüberlegten Situationen verwenden!

Folie 17/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 18: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Teil II

Ausnahmebehandlung

Folie 18/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 19: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Motivation

Im Ablauf eines Programms passieren unerwartete DingeI Dateien fehlen oder haben nicht erwarteten Inhalt, Timeouts, SpeichermangelI Fehlende Daten führen zu lokal nicht lösbaren Problemen (Fehler kann häufig

nur auf höherer Programmebene gelöst werden)

Rückgabewerte sind nicht immer geeignet und können ignoriert werden

Erreichen der Zielsetzung und Fehlerbehebung sind völlig unabhängigeAspekteI Code zur Wahrung der Funktionalität ↔ Code zur FehlerbehebungI Vorteil bei unabhängigen Codefragmenten, d. h. bei der Teamarbeit

Folie 19/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 20: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Ansatz

Fehler erkennen und meldenI Man wirft eine Ausnahme/ExceptionI Schlüsselwort throw

Codestellen auf geworfene Ausnahmen überprüfenI Schlüsselwort try

Behandlung der aufgetretenen AusnahmeI (ab)fangen eines FehlersI Schlüsselwort catch

Folie 20/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 21: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

throw

throw int(5);

throw Fehlerklasse();

Man kann Ausnahmen beliebigen Typs werfen:

Standarddatentypen, beliebige Klassen

Die Auswahl hängt mit davon ab, welche Information transportiert werden

soll bzw. wie verschiedenartig die zu erwartenden Fehler sind.

Das geworfene Objekt wird erzeugt und bis zur Behandlung an aufrufende

Funktionen zurückgegeben.

Unbehandelte Ausnahmen führen zu Programmabbruch.

Bei der Behandlung einer Ausnahme kann man diese durch throw; erneut

werfen.

Folie 21/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 22: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

try-Block

try {

// Anweisungsblock

}

catch(int) {

// Fehlerbehandlung für Integer

}

catch(AK) {

// Fehlerbehandlung für Klasse AK

}

catch(BK){

// Fehlerbehandlung für Klasse BK

}

catch(...){

// Fehlerbehandlung für alle anderen Fehler

}

Nur ein catch wird

ausgeführt!

Prüfung in Reihenfolge

des Codes!

Folie 22/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 23: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Was tun mit einer gefangenen Ausnahme?

Problem beheben und Funktion erneut aufrufen

Weiter ohne erneuten Aufruf der FunktionI einen Zustand herstellen, der ohne die Funktion zurechtkommtI alternative Berechnung/Standardwerte verwenden

Im Rahmen der aktuellen Möglichkeiten handeln und das Problem nach obenweiterreichenI durch Werfen der gleichen AusnahmeI durch Werfen einer anderen Ausnahme

Das Programm beenden

Wenn man die Ausnahmenbehandlung möglichst einfach und übersichtlich hält,

vereinfacht man einerseits das Debugging und bekommt andererseits ein

stabileres Programm.

Folie 23/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 24: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Unbehandelte und unerwartete Ausnahmen

Bleibt eine Ausnahme unbehandelt: Aufruf von std::terminate()

Kann bei Bedarf umgestellt werden:

terminate_handler set_terminate(terminate_handler)

Ausnahmenspezifikation

void wirftFehler() throw(Kl, std::bad_alloc);

Ohne Ausnahmenspezifikation: Alle Ausnahmen sind möglich

Werfen einer nicht genannten Ausnahme: Aufruf von std::unexpected()

Kann bei Bedarf umgestellt werden:

terminate_handler set_unexpected(terminate_handler)

unexpected(): Hilfreich vor allem beim Testen

Folie 24/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 25: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

Standardausnahmen

Sprachelemente und die Standardbibliothek werfen Ausnahmen

Standardausnahmen sind in Klassenhierarchie gegliedert

exception empfiehlt sich auch als Basisklasse für eigene Fehlerklassen

class exception {

public:

exception() throw();

exception(const exception&) throw();

exception& operator=(const exception&) throw();

virtual ~exception() throw();

virtal const char* what() const throw();

private:

...

}

Folie 25/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 26: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

C++ Standard Exceptions

Folie 26/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 27: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

dynamic_cast

void meineFunktion(Auto* meinAuto) {

Cabrio* meinCabrio = dynamic_cast<Cabrio*>(meinAuto);

if (meinCabrio != NULL)

meinCabrio->verdeckOeffnen();

else

std::cerr << "Kein Cabrio!" << std::endl;

meinAuto->bremsen(); //Klappt immer!

}

Folie 27/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019

Page 28: Grundkurs C++ - Typwandlung & Fehlerbehandlung · LehrstuhlfürDatenverarbeitung FakultätfürElektrotechnikundInformationstechnik TechnischeUniversitätMünchen GrundkursC++ Typwandlung&Fehlerbehandlung

Lehrstuhl für Datenverarbeitung

Fakultät für Elektrotechnik und Informationstechnik

Technische Universität München

dynamic_cast mit Referenz

void meineFunktion(Auto& meinAuto) {

try {

Cabrio& meinCabrio = dynamic_cast<Cabrio&>(meinAuto);

}

catch (const std::bad_cast& e) {

std::cerr << "Kein Cabrio!" << std::endl;

}

meinAuto->bremsen(); //Klappt immer!

}

Folie 28/28 GK C++: Typwandlung & Fehlerbehandlung Martin Gottwald und Stefan Röhrl 05. Juni 2019