1.5. Strukturierte Anweisungen

Ähnliche Dokumente
std::cerr << "unerwartete sonstige Exception" << std::endl; return EXIT_FAILURE; // main() mit Fehlerstatus beenden

10. Namespaces, Templates und Exceptions

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einstieg in die Informatik mit Java

Codingstandard. Softwareentwicklung Praktikum Stand:

Kurze Einführung in die Programmiersprache C++ und in Root

0. Einführung & Motivation

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Exceptions. Prof. Dr. Margarita Esponda SS M. Esponda-Argüero

Selber Programmieren

Java Fehlerbehandlung

Einführung in die Programmierung

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

9. Fehlerbehandlung Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

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

Embedded Software. Der C Präprozessor. Sichere objektbasierte Entwicklung dank C Präprozessor. Prof. Dr. Nikolaus Wulff

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

6. Iteration (Schleifenanweisungen)

Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4

5. Elementare Befehle und Struktogramme

Welche Informatik-Kenntnisse bringen Sie mit?

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Angewandte Mathematik und Programmierung

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

Einführung in die C-Programmierung

Objektorientierte Programmierung mit C++ SS 2007

Java-Schulung Grundlagen

Datenbankanwendungsprogrammierung Crashkurs Java

Angewandte Mathematik und Programmierung

Informatik I (D-MAVT)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Einführung in die Programmierung Blockkurs Java

Annehmende Schleife do while

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

Codegeneratoren mit Xtend , A. Arnold

Einführung in die Programmierung (EPR)

Zählen von Objekten einer bestimmten Klasse

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

C++ - Eine Ubersicht fur Java-Programmierer

5 Grundlagen der Java-Syntax

Klausurvorbereitung Lösung

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Programmierung mit C Zeiger

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Theorie zu Übung 8 Implementierung in Java

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

Höhere Programmierkonzepte Testklausur

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Java - Programmierung - Objektorientierte Programmierung 1

1 Polymorphie (Vielgestaltigkeit)

Gebundene Typparameter

Mehrfachvererbung 372

3. Anweisungen und Kontrollstrukturen

Die Programmiersprache C Eine Einführung

11. Klassen. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

RO-Tutorien 3 / 6 / 12

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

C/C++ Programmierung

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

Vergleich verschiedener OO-Programmiersprachen

C- Kurs 04 Anweisungen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

Java Einführung Methoden. Kapitel 6

Angewandte Mathematik und Programmierung

1. Der Einstieg in Java. Was heißt Programmieren?

Einführung in die Programmierung

Tutorium Rechnerorganisation

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

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

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

boost::asio-bibliothek 238

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Informatik 1 ( ) D-MAVT F2010. Logik, Schleifen. Yves Brise Übungsstunde 4

Javakurs zu Informatik I. Henning Heitkötter

Objektorientiertes Programmieren für Ingenieure

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg

6 Speicherorganisation

Programmierkurs. Manfred Jackel

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

II.1.1. Erste Schritte - 1 -

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

JAVA - Methoden

Hydroinformatik I: Hello World

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Übungen Informatik I. JAVA - Einführung. elga Gabler, Holger Vogelsang, Christian Pape. Übungen Informatik 1 Folie 1

Objektorientiertes Programmieren mit C++ für Fortgeschrittene

Programmieren I + II Regeln der Code-Formatierung

Elementare Datentypen in C++

Programmieren in Java

5. Tutorium zu Programmieren

CORBA Implementierung von Client und Server

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

AuD-Tafelübung T-B5b

Transkript:

1.5. Strukturierte Anweisungen Switch-Anweisung (C++): Initialisierungen dürfen nicht 'übersprungen' werden: switch (i) { int v1 = 2; // ERROR: jump past initialized variable case 1: int v2 = 3; //... case 2: if (v2 == 7) // ERROR: jump past initialized variable //... 84

1.5. Un : - ) Strukturierte Anweisung goto - the don't use statement loop: goto skip: //... //... goto loop; skip: //... Initialisierungen dürfen auch nicht 'übersprungen' werden: 85

1.5. Strukturierte Anweisungen Exception Handling : syntaktisch wie in Java (kein finally) try { // things that may throw or not catch ( Exception1 e ) { // handle e catch ( Exception2 e ) { // handle e... bei Auftreten einer Ausnahme wird der try-block verlassen und zu einem passenden (ggf. übergeordneten) catch-block verzweigt, zuvor werden alle Destruktoren lokaler Objekte gerufen, die erfolgreich konstruiert wurden! 86

#include <iostream> using std::cout; using std::endl; class X { public: X(int i=0){cout<<"x("<<i<<")\n"; ~X(){cout<<"~X()\n"; ; void foo(int i) { try { X local; if (i==1) throw "ooops"; else if (i==2) throw 42; catch (const char* why) { cout<<why<<endl; 87

//... cont. int main() { try { X x1(1); foo(1); X x2(2); foo(2); catch (int r) { cout<<"exception: code "<<r<<endl; catch (...) { X(1) X(0) ~X() ooops X(2) X(0) ~X() ~X() ~X() exception: code 42 cout<<"something thrown: don't know what\n"; 88

Exceptions sind Objekte beliebigen Typs stack unwinding ruft ggf. Destruktoren in einem catch-block kann eine Exception mittels throw; 're-thrown' werden... catch (...) { void handleall(); // proto... handleall();... void handleall() { try { throw; catch (double x) { cout << x << endl; // z.b. 89

wird eine Exception nirgends 'gefangen', so endet dass Programm durch aufruf von std::terminate() (dies ruft wiederum (* std::abort() ) mittels std::set_terminate() kann man dieses Verhalten ändern: Prototyp void (*set_terminate(void (*term_handler)())) ();????? oder leichter nachvollziehbar: typedef void (*TH)(); TH set_terminate(th); (* es ist implementation-defined, ob dabei stack-unwinding stattfindet!!! 90

std::terminate() wird auch gerufen, wenn während der Behandlung einer Ausnahme eine weitere Ausnahme auftritt Funktionen können mit sog. exception specifications ausgestattet sein, (entspricht den throws-klauseln von Java aber) Java: void foo(); // lässt keine Exceptions 'raus' C++: void foo(); // lässt beliebige Exceptions 'raus' void foo () throw (dies, das, nochwasanderes); Java: vollständige Flussanalyse zur Compile-Zeit C++: keinerlei Flussanalyse, aber Überwachung zur Laufzeit tritt eine Exception auf, die nicht spezifiziert wurde, wird std::unexpected() (dies ruft wiederum std::terminate() ) gerufen 91

mittels std::set_unexpected() kann man dieses Verhalten ändern Aber: Herb Sutter (Exceptional C++, Item 13) und auch Boost (Exception-specification rationale): Never write an exception specification! Destruktoren sollten NIEMALS Ausnahmen erzeugen: X::~X() throw (); WARUM 92

es gibt die Möglichkeit eine ganze Funktion als try-block zu implementieren: int foo(int i) try { may_throw(i); return 0; catch (int ex) { return -1; Es gibt eine Reihe vordefinierter Ausnahmen 93

exception bad_alloc bad_cast bad_typeid logic_error ios_base::failure runtime_error bad_exception domain_error invalid_argument length_error out_of_range range_error overflow_error underflow_error 94