Ladda ner presentationen
Presentation laddar. Vänta.
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
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.