Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Datenstrukturen Look-Up Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Klassen und Objekte
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
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.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Informatik 1 Letzte Übung.
Dynamische Datentypen
Dienstag Informatik 1 Tag 2
EPROG Tutorium #3 Philipp Effenberger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Die STL. Schreiben und Lesen von Dateien  Einbinden von  Lesen und Schreiben über stream-Objekte Streams führen Transformationen zwischen Programmobjekten.
Einführung. Ziel der Veranstaltung  Vermittlung von Grundkenntnissen in C++  Solide Basis für anschließende Weiterentwicklung  Fähigkeit, kleine Programme.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Operator Overloading, Mehrfachvererbung, Safe Pointer, Observer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Programmieren in C / C++ Klassen und Vererbung, Templates
Hochschule Fulda – FB AI Sommersemester 2017
Zwei Denkansätze zur Klasse Schlange
Friends C++ ermöglicht, einzelne Funktionen oder ganze Klassen zu friends zu erklären. Friendfunktionen haben Zugang zu den privaten Daten einer Klasse.
Felder in Java.
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Einführung in die Programmierung
Einführung in die Programmierung
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Polymorphie Überladen
Ausnahmen Exceptions Definition Ausnahmen erzeugen Ausnahmen abfangen
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Implementieren von Klassen
Statische und Nichtstatische Methoden Properties / Eigenschaften
Einführung in die Programmierung
 Präsentation transkript:

Singletons, Exceptions und (s)printf

Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden  Memberfunktionen müssen in der Headerdatei deklariert werden (oder per #include direkt nach der Klassendeklaration eingebunden) TemplateClass var; template returnType ClassName ::functName (...)

Singletons  genau eine Instanz einer Klasse  Instanz sollte möglichst überall zur Verfügung stehen  Basisfunktionalität statische (Member)Variable zum Speichern der konkreten Klasseninstanz Funktion zum Zugriff auf (und falls notwendig zur Erzeugung) der Instanz Funktion zum Freigeben der Instanz

Singletons template class SingletonBase { protected: static stClass *pSingleton_; public: virtual ~stClass() {} inline static stClass* Get() { if (!pSingleton_) pSingleton_ = new stClass; return (pSingleton_); } static void Del(); } template stClass *SingletonBase ::pSingleton_ = NULL;

Singleton verwenden  Ableiten von der eben erstellten Klasse class ConcreteSingleton : public SingletonBase { public: // Funktionalität der Klasse void SimpleFunction(); };  Verwendung des Singletons:... ConcreteSingleton::Get()->SimpleFunction();... ConcreteSingleton::Del();

Exceptions  zur Meldung von Laufzeitfehlern, für die es keine sinnvolle Behandlung gibt  Trennung von Problemerkennung und Problembehandlung bei Problemerkennung wird eine Exception "geworfen" (-> throw) die Exception wird solange in der Methodenaufrufhierarchie "hochgereicht" (Stack Unwinding), bis ein behandelnder Teil (catch) gefunden wird  Exceptions sind frei definierbaren Typs

Exceptions  Fehlerbehandlung in "try-catch-Block"  Bearbeitung abhängig vom Typ  mehrere catch-Blöcke möglich try {... FunctionCallCausesError(); FunctionNotReachedAnymore(); } catch (ExceptionType &exc) {... cout << "Fehler ExceptionType aufgetreten." << endl; } catch (OtherExceptionType &exc) {... }

Exceptions  Funktion kann angeben, welche Exceptions geworfen werden können in Deklaration und Definition retType funcName(...) throw(ExceptionType) mehrere Exceptions durch Komma getrennt bei keiner Angabe können beliebige Exceptions geworfen werden bei leerer Liste throw() kann keine Exception geworfen werden void FunctionCallCausesError() throw(MyException) { throw MyException(); }

Exceptions  Exception-Klasse muss zugreifbaren Copy- Konstruktor besitzen  Beliebige Ableitungsstrukturen möglich (und praktisch)  Exception sollte das Problem, nicht das Modul in dem der Fehler auftrat beschreiben  Auswahl bei mehreren Catch-Blöcken: Der erste passende Exception hat genau denselben Typ wie Parameter Parameter ist eine public – Basisklasse der Exception  "weiterwerfen" einer Exception mittels throw;  In einem Destruktor niemals eine Exception werfen  Vorsicht bei Exceptions im Konstruktor

Exceptions  Exceptions in der Standard-Bibliothek von C++ new wirft bad_alloc ○ #include dynamic_cast wirft bad_cast ○ #include Weitere Exceptions in der Dokumentation der jeweiligen Methoden, Operatoren und Funktionen  kein eindeutiges Namensschema

Exceptions  Exceptionmodell in stdexcept  exception logic_error ○ domain_error ○ invalid_argument ○ length_error ○ out_of_range runtime_error ○ range_error ○ overflow_error ○ underflow_error

Exception  Standardexception werfen throw exception("Text, der einen Hinweis auf den aufgetretenen Fheler gibt");  Standardexception fangen catch (exception &exc) { cout << "Fehler: " << typeid(exc).name() << " – " << exc.what() << endl; }

Aufgabe 21 – Ausnahmezustand!  Erstelle eine einfache Exception-Klasse, die Indexfehler melden soll  Erstelle eine Funktion, die den Inhalt eines übergebenen Arrays an einer angegebenen Stelle zurückgibt  Sollte die angegebene Stelle außerhalb des Array-Bereiches liegen, wirf die zuvor erstellte Exception  Teste die Funktion, indem du ein Array erstellst und versuchst, mittels der Funktion auf einen Index außerhalb des Bereiches zuzugreifen

printf  dient zur Formatierung von auszugebenden Text  Formatspezifizierer bestimmen die Formatierung der Ausgabe  Funktion mit variabler Parameterliste erster Parameter besteht aus Text und n Formatspezifizierern weitere Parameter ersetzen die Formatspezifizierer Anzahl Parameter: 1 + n

printf printf("Name: %s, Alter %i", name, age);  Platzhalter beginnen mit einem %  Optionale Formatierer Auffüllen auf minimale Länge, incl. Ausrichtung Anzahl der ausgegebenen Zeichen, Nachkommastellen

printf Spez.BeschreibungBeispiel d oder iVorzeichenbehafteter Ganzzahlwert42 fFliesskommazahl sZeichenketteExample %Ausgabe des Zeichens '%'% printf("Char: %c %c\n", 'a', 65); Char: a A printf("Numbers: %06d", 2009); Numbers: printf("Float: %6.2f", ); Float: 3.14

sprintf  Analog zu printf, schreibt aber die zu formatierende Zeichenkette in ein Char- Array  erster Parameter ist das zu beschreibende Char-Array  Achtung: Absturz bei zu kleinem Array char Buffer[64]; sprintf(Buffer, "Formatiert %6.2f\n", );