Presentation laddar. Vänta.

Presentation laddar. Vänta.

Detaljer i exception-hantering

Liknande presentationer


En presentation över ämnet: "Detaljer i exception-hantering"— Presentationens avskrift:

1 Detaljer i exception-hantering
throw skapar temporärt objekt av exception-klassen exception-objektet tillverkas genom att det första objektet kopieras till speciell lagringsplats temporärobjektets statiska typ används temporärobjektet tas bort exception handler letas upp stack unwind, destruktoranrop auto_ptr?! därför bör resurser representeras av objekt 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

2 Detaljer i exception-hantering forts
catch (Extype eobj) eobj exception-objektet kopieras till eobj Om Extype är basklass till exception-objektet kopieras endast basklass-delen eventuellt rethrow skickar exception-objektet (inte eobj) vidare 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

3 Detaljer i exception-hantering forts
class Base { virtual print() throw (file_err, io_err); } class Derived { virtual print() throw (file_err); Mer restriktiv myBaseP->print(); // i värsta fall... 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

4 Detaljer i exception-hantering forts
MyClass::MyClass(int test1, int test2) try : medlem1(test1) medlem2(test2) { /* kod */ } catch (...) 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

5 exception(const exception &) throw ();
//exception.h namespace std { class exception { public: exception() throw(); exception(const exception &) throw (); exception& operator=(const exception &) throw(); virtual ~exception() throw(); virtual const char* what() const throw(); } 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

6 Predefined exception classes
logic_error runtime_error bad_alloc bad_cast out_of_range length_error range_error invalid_argument domain_error overflow_error underflow_error 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

7 Funktionsmall template <class Type>
void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras och // användas inom funktionen } Type döljer ev. Type deklarerat före mallen Implicit instansiering, Type byts mot aktuell typ 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

8 Klassmall template <class Type> class Stack { Stack(); ~Stack();
void push(const Type item); void pop(Type &item); } instansiering görs explicit enligt: Stack<int> my_stack; Type byts mot aktuell typ 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

9 Template nontype parameter+defaults
template <class Type=string, int size=1024> class Stack { public: Stack(); ~Stack(); void push(const Type item); void pop(Type &item); private: Type theStack[size]; } konstant uttryck, beräknas vid kompilering Defaultvärde från flera deklarationer kan användas 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

10 Klassmall forts Medlemsfunktioner definierade i .cpp-filen måste också göras som mallar: template <class Type> Stack<Type>::push const Type item) // OBS! { // kod } Type byts mot aktuell typ 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

11 friends (vänner) i klassmallar
Följande kan vara “vänner till klassmallar”: klass eller funktion som inte är mall Klass eller funktion som är mall, bunden till klassmallen genom att den använder klassmallens typparameter Klass eller funktion som är mall, obunden, dvs med egen typparameter oberoende av klassmallens 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

12 Om klassvariabler definieras i en klassmall får varje instansiering sin egen uppsättning.
Klasser inuti klasser kan göras även med mall. Den inre klassen kan använda den yttre klassens mall-parametrar. Medlemsfunktioner och nästade klasser i en klassmall kan ha egna typparametrar oberoende av klassmallens, ”member template” detta används i abstrakta containertyper 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

13 Abstrakta Containertyper
Vilka finns fördefinierade? Vad kan dom? 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

14 Sekventiell container
innehåller en ordnad följd av element. Följande typer finns: vector Specialfall “deque”, optimerad för köer lista 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

15 dvs “array” i C, C++, Pascal m.fl. programmeringsspråk.
OBS! Det svenska ordet vektor betyder inom matematiken endimensionell matris, dvs “array” i C, C++, Pascal m.fl. programmeringsspråk. Detta är inte samma sak som “vector” i C++! 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

16 vector<Type> 1 2 3 4 5/20/2018 CD5250 OOP med C++
1 2 3 4 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

17 vector member functions
size capacity reserve resize push_back push_front [] begin end insert element/sequence erase element/sequence operator= empty vector(vec.pos1,vec.pos2) find 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

18 list<Type> 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

19 list member functions begin end insert element/sequence size push_back
push_front merge sort reverse erase element/sequence operator= empty list(list2.pos1,list2.pos2) 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

20 Iteratoranvändning for (vector<string>::iterator myiterator = mycontainer.begin(); myiterator!= mycontainer.end(); ++ myiterator) cout << * myiterator << endl; 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

21 Associativ container Stöder effektiv sökning Följande typer finns:
map - (nyckel, värde) - par set - visst element finns/finns inte multimap, multiset: som map, set men det kan finnas flera par/element med samma nyckel 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

22 map<Type1, Type2> #include <map>
map <string,int> myPhonebook; myPhonebook.insert(string(“Joe”), ); ... int joes_number = myPhonebook[“Joe”]; myPhonebook.erase(“Joe”); 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

23 set<Type> #include <set> set <int> lucky_numbers;
lucky_numbers.insert(3); lucky_numbers.insert(7); lucky_numbers.insert(13); 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT


Ladda ner ppt "Detaljer i exception-hantering"

Liknande presentationer


Google-annonser