În plus față de funcțiile șablonului, puteți defini și clase de șabloane. Pentru a face acest lucru, trebuie să creați o clasă care să definească toți algoritmii, dar tipul de date real este parametrul definit când clasa este creată.
șablon
>
Aici pasărea este un parametru de tip, care va fi specificat atunci când se creează o instanță a clasei. Dacă este necesar, puteți defini mai multe tipuri de șabloane utilizând o listă și o virgulă ca delimitator.
După crearea clasei de șabloane, puteți crea o instanță specifică din această clasă utilizând următoarea formă generală:
class_name <тип> opoziție;
Aici, tipul este numele tipului de date cu care va funcționa această clasă.
Funcțiile membre ale clasei de șabloane sunt ele însele șabloane automate. Nu este necesar să subliniem în mod specific faptul că acestea sunt șabloane utilizând șablonul de cuvinte cheie.
Următorul program creează un șablon de clasă numit stivă, care implementează stiva standard "ultimul în primul-out". Acesta poate fi folosit pentru a implementa un teanc cu un tip de date arbitrar. În exemplul prezentat aici, vom crea stive de simboluri, numere întregi și numere în virgulă mobilă.
// Demonstrați stiva de șabloane
#include
const int SIZE = 100;
// creați un stack de șabloane
șablon
int tos;
publice:
stivă ();
stivă ();
împingere involuntară (SType i);
Scriptul pop ();
>;
// stack funcțional constructor
șablon
tos = 0;
cout <<"Stack Initialized\n";
>
/ * stivă de distrugere a funcțiilor
Această funcție nu este necesară. Este inclusă doar pentru ilustrare. * /
șablon
stivă ()
cout <<"Stack Destroyed\n";
>
// punerea obiectului pe stivă
șablon
dacă (tos == SIZE) cout <<"Stack is full. \n";
return;
>
stck [tos] = i;
tos ++;
>
// extrage obiectul din stivă
șablon
dacă (tos == 0) cout <<"Stack underflow.\n";
retur 0;
>
tos -;
întoarcere stoc [tos];
>
int main ()
grămadă
grămadă
grămadă
int i;
// utilizați stive întregi și reale
a.push (1);
b.push (99,3);
a.push (2);
b.push (-12,23);
cout <
pentru (i = 0; i<10; i++) с.push ( (char) 'A'+i);
pentru (i = 0; i<10; i+ + ) cout <
retur 0;
>
grămadă
grămadă
grămadă
Să acordăm atenție modului în care se substituie tipul corect de date în paranteze unghiulare. Schimbarea tipului de date specificat la crearea obiectelor stack modifică simultan tipul de date stocate în stivă. De exemplu, puteți crea un alt teanc care să dețină indicii pentru caractere:
grămadă
numele de identificare a structurii [40];
cartier [40];
orașul char [30];
caracterele [3];
char zip [12];
>
Apoi, puteți folosi clasa stivă pentru a crea un teanc în care sunt stocate obiecte de tipul addr: