Sunteți pe pagina 1din 22

Programare Orientată Obiect

in C++
C12 – Funcții și Clase Template

Alin ZAMFIROIU
alin.zamfiroiu@csie.ase.ro
Despre ce vorbim azi:
• Funcții template;
• Clase template;
Funcții Template

• Funcțiile template permit generalizarea codului prin definirea de


funcții care lucrează cu tipuri generice.

• Astfel funcțiile respective sunt niște șabloane care vor lucra cu orice
tip definit de către programator.
Funcții Template

• Programatorul definește șabloanele pentru a fi folosite de către


compilator.

• Compilatorul va înlocui tipul generic definit de către programator cu


tipul concret pentru care este apelată funcția respectivă.
Funcții Template
• Definirea tipurilor generice sau a tipurilor template:

• class TIP

• typename TIP
Funcții Template
• Definirea funcțiilor template:
Funcții Template
Funcții Template
• Utilizarea funcțiilor template
• Pentru utilizarea funcției template, aceasta trebuie apelată.

• Se poate de asemenea ca programatorul să specifice tipurile template


la momentul apelului:
Funcții Template
• Exemple concrete: Funcția de adunare
Funcții Template
• Exemple concrete: Funcția de comparare
Clase Template
• Asemănător cu funcțiile template, putem să definim ci clase
template, care sunt șabloane ce vor lucra cu orice tip de date.

• Programatorul scrie șablonul de clasă în care implementează


funcții și metode ce vor lucra cu tipul generic, apoi compilatorul va
genera clasa care să lucreze cu tipul concret pentru care este
utilizată clasa respectivă.
Clase Template
• Definirea de clasă template:
Clase Template
• Exemplu concret de clasa template:
Clase Template
• Pentru utilizarea clasei trebuie să precizăm ceea ce colecționează
respectivul coleționar.
Clase Template
• Clase template cu constante.

• Constantele sunt definite pentru a fi folosite în întreaga clasă.

• Aceste constante pot fi inițializate și cu valori default.


Clase Template
Clase Template
• Această constantă poate să aibă și o valoare default cu care este
inițializată.
Clase Template
• Moștenirea unei clase template.
• Clasa care moștenește(derivata) poate fi non-template. Pentru acest
lucru, tipul generic trebuie stabilit în momentul moștenirii.
Clase Template
• Daca și derivata este o clasă template, tipul poate fi trimis mai departe
clasei de bază.
Clase Template
• Compunerea de clase template.
• O clasă poate conține atribut de tipul unei alte clase care este
template.

• Astfel avem relația de “has a” între o clasă non-template sau template


și o clasă template.
Clase Template
• Dacă avem o clasă nonTemplate care are o relație de ”has a” cu o clasă
template, tipul concret pentru clasa template trebuie stabilit la
momentul declarării atributului respectiv.
Clase Template
• Dacă ne dorim ca această asociație să fi pentru orice fel de
colecționari, trebuie ca și această clasă să devină template.

S-ar putea să vă placă și