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
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
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
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
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
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
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
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
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
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
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
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
Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom? 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT
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
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
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
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
list<Type> 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT
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
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
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
map<Type1, Type2> #include <map> map <string,int> myPhonebook; myPhonebook.insert(string(“Joe”), 123456); ... int joes_number = myPhonebook[“Joe”]; myPhonebook.erase(“Joe”); 5/20/2018 CD5250 OOP med C++ Mats Medin MDH/IDT
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