Clase de șabloane, programare c și c

Î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 clasa nume_clasă.
>

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 stivă de clasă STYPE stck [SIZE];
int tos;
publice:
stivă ();

stivă ();
împingere involuntară (SType i);
Scriptul pop ();
>;
// stack funcțional constructor
șablon grămadă:: stack ()
tos = 0;
cout <<"Stack Initialized\n";
>
/ * stivă de distrugere a funcțiilor
Această funcție nu este necesară. Este inclusă doar pentru ilustrare. * /
șablon grămadă::

stivă ()
cout <<"Stack Destroyed\n";
>
// punerea obiectului pe stivă
șablon void stiva:: împinge (STYPE i)
dacă (tos == SIZE) cout <<"Stack is full. \n";
return;
>
stck [tos] = i;
tos ++;
>
// extrage obiectul din stivă
șablon Stack de stiva:: pop ()
dacă (tos == 0) cout <<"Stack underflow.\n";
retur 0;
>
tos -;
întoarcere stoc [tos];
>
int main ()
grămadă o; // creați un stiv întreg
grămadă b; // creați un stilu real
grămadă cu; // creați un sir de caractere
int i;
// utilizați stive întregi și reale
a.push (1);
b.push (99,3);
a.push (2);
b.push (-12,23);
cout < cout < cout < cout < // arătați stiva de caractere
pentru (i = 0; i<10; i++) с.push ( (char) 'A'+i);
pentru (i = 0; i<10; i+ + ) cout < cout <<"\n";
retur 0;
>

grămadă și; // creați un stiv întreg
grămadă b; // creați un stilu real
grămadă cu; // creați un sir de caractere

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ă chrptrstck;

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:

Articole similare