Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden."—  Präsentation transkript:

1 Singletons, Exceptions und (s)printf

2 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 (...)

3 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

4 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;

5 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();

6 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

7 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) {... }

8 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(); }

9 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

10 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

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

12 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; }

13 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

14 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

15 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

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

17 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", 3.1415);


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

Ähnliche Präsentationen


Google-Anzeigen