60 likes | 279 Views
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. Klassmall.
E N D
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 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 CD5250 OOP med C++ Mats Medin MDH/IDT
Template nontype parameter+defaults konstant uttryck, beräknas vid kompilering 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]; } Defaultvärde från flera deklarationer kan användas 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 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 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 CD5250 OOP med C++ Mats Medin MDH/IDT