Partea7 - 7 Clase i funcii template Template-urile...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
7 Clase şi funcţii template Template-urile (şabloanele) permit crearea de clase sau funcţii generice, în care tipurile de date asupra cărora se operează sunt specificate ca argumente. Un template defineşte o familie de tipuri (clase) sau funcţii. Forma generală de declarare a unui template este: template<lista_argumente> declaratie unde lista_argumente conţine unul sau mai multe argumente formale, separate prin virgulă, fiecare definit prin tipul argumentului şi numele lui, iar declaratie trebuie să declare sau să definească o funcţie sau o clasă. Argumentele formale de tip predefinit din lista de argumente se introduc prin numele tipului urmat de numele argumentului, iar argumentele formale de tip definit de utilizator (clase) se introduc prin specificatorul class urmat de numele argumentului. De exemplu, o declaraţie de template poate arăta în felul următor: template<class X, class Y, int s> declaratie 7.1 Clase template O clasă template specifică modul în care pot fi construite clase individuale, diferenţiate prin tipul sau tipurile de date asupra cărore se operează. O clasă template pentru definirea unei stive de obiecte de un tip oarecare T poate arata în felul următor: template<class T> class TStack{ T *bot; T *top; int size; public: TStack(int s){ size = s; bot = top = new T[s]; } 1
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
~TStack(){delete [] bot;} void push(T t){*top++ = t;} T pop(){return *--top;} }; Clasa template TStack conţine ca date private doi pointeri: pointerul bot , pentru memorarea adresei de început a stivei şi pointerul top , pentru memorarea capului stivei. Dimensiunea size a tabloului unidimensional (vector), creat dinamic la construcţia unui obiect stivă, este necesară pentru testarea depăşirii capacităţii stivei în funcţia push() , dar aceste teste nu au mai fost prezentate, pentru simplicitate. Prefixul template<class T> specifică declararea unui template cu un argument cu numele T . După această intoducere, T este folosit exact la fel ca orice tip de date, în tot domeniul clasei template declarate. Numele unei clase template urmat de numele tipurilor de date folosite ca argumente, încadrate de paranteze ascuţite < > este numele unei clase (definite aşa cum specifică template-ul) şi poate fi folosită la fel ca oricare altă clasă. De exemplu, un obiect stivă de numere întregi istack poate fi declarat folosind clasa template TStack astfel: TStack<int> istack(100); // stivă de numere întregi Cu excepţia diferenţei în sintaxa numelui, clasa TStack<int> se comportă exact la fel cum s-ar comporta dacă ar fi fost definită astfel: class IStack{ int *bot; int *top; int size; public: IStack(int s){ size = s; bot = top = new int[s]; } ~IStack(){delete [] bot;} void push(int t){*top++ = t;} int pop(){return *--top;} }; Utilizarea template-urilor nu implică mecanisme run-time ci doar generarea de către compilator a fiecarei clase care corespunde tipului (sau tipurilor) de date folosit la declararea unui obiect. Exemplul 7.1
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

This note was uploaded on 08/10/2009 for the course CS UCJ01001 taught by Professor Ionstoica during the Spring '09 term at 東京大学.

Page1 / 14

Partea7 - 7 Clase i funcii template Template-urile...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online