Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Uwe Bauer Geändert vor über 7 Jahren
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);
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.