Documente Academic
Documente Profesional
Documente Cultură
Chişinău 2020
Scopul lucrării:
• Studierea necesităţii şabloanelor;
• Studierea regulilor de definire şi utilizare a şabloanelor;
• Studierea specializării şabloanelor;
• Studierea potenţialelor probleme rezolvate cu ajutorul şabloanelor;
Varianta 12
а) Creaţi o funcţie şablon, de căutare a elementului al doilea minimal după mărime din elementele listei. De
exemplu: lista - 0 2 3 4 3 6, rezultatul - 2. Funcţia trebuie să lucreze cu masive de lungimi diferite.
b) Creaţi clasa parametrizată Matrix – matrice. Clasa trebuie să conţină constructorii, destructorii şi funcţiile
getRows, getCols, operatorii [], +=, -=, *= şi de intrare/ieşire.
Codul:
#include <stdio.h>
#include <iostream>
#include <math.h>
int main(){
int *a;
float *b;
char *c;
List(int num){
n = num;
this->tab = new T[num];
}
~List(){
delete[] this->tab;
}
int getLenght(){
return this->n;
}
friend ostream & operator << (ostream & out , List<T> & copy){
for (int j = 0; j < copy.n; j++){
out << j + 1 << ": " << copy.tab[j] << endl;
}
return out;
}
};
int main(){
system("cls");
int k, k1;
List<int> *a;
List<float> *b;
int n;
cout << "Introdu Marimea Listei A: " << endl;
cin >> n;
a = new List<int>(n);
cin >> (*a);
int n1;
cout << endl;
cout << "Introdu Marimea Listea B: " << endl;
cin >> n1;
b = new List <float>(n1);
cin >> (*b);
case 2:
cout << "Introducerea datelor:" << endl;
cout << "Lista A: " << endl;
(*a).add(*a);
cout << "Lista B: " << endl;
k1 = (*b).getLenght();
(*b).add(*b);
system("pause");
break;
case 3:
cout << "Controlarea elementelor" << endl;
cout << "Lista A: " << endl;
k = (*a).getLenght();
(*a).in(k);
cout << endl;
cout << "Lista B: " << endl;
k1 = (*b).getLenght();
(*b).in(k1);
system("pause");
break;
case 4:
cout << "Excluderea elementelor" << endl;
cout << "Lista A: " << endl;
k = (*a).getLenght();
(*a).remove(*a,k);
cout << endl;
cout << "Lista B: " << endl;
k1 = (*b).getLenght();
(*b).remove(*b, k1);
system("pause");
break;
case 5:
cout << "Marimea elementelor: " << endl;
cout << "Lista A: " << endl;
cout << (*a).getLenght();
cout << endl;
cout << "Lista B: " << endl;
cout << (*b).getLenght();
system("pause");
break;
case 6:
cout << "Returnarea elementelor " << endl;
cout << "Introdu pozitia: " << endl;
int i;
cin >> i;
i--;
cout << "Lista A: " << endl;
cout << (*a)[i];
cout << endl;
cout << "Lista B: " << endl;
cout << (*b)[i];
system("pause");
break;
case 0:
exit = 1;
break;
}
} while (!exit);
}
Intrebari de control:
1. Ce reprezintă prin sine șabloanele?
Șabloanele reprezintă prin sine un mecanism ce permite să scrii un algoritm, care nu este legat de un tip anumit. Cel mai
des, șabloanele sunt utilizate pentru crearea container şi algoritmi abstracți.
Șabloanele creează aprovizionarea, care, ca urmare, se utilizează deja cu tipurile de date specificate. Dacă șabloanele sunt
utilizate cu câteva tipuri de date diferite, compilatorul creează un codul necesar pentru fiecare tip în parte. Simțitor
micșorează codul de ieșire, care duce la, micșorarea cantității de erori, micșorează introducerea modificărilor în cod și
micșorează prezentarea programelor în general, așa cum se micșorează calitatea tipurilor și funcțiilor date.
Specializarea se utilizează cînd avem o funcție parametrizată dar totuși există un anume timp care nu poate fi procesat de
această funcție, ca de exemplu o funcție de comparare a 2 valori, dacă trimitem 2 șiruri de caractere o să fie comparate
pointerii lor ci nu șirurile.
4. Ce poate fi un șablon?
Problemele utilizării șabloanelor sunt că este foarte complicat și are o sintaxă neobișnuită ce duce la utilizarea rară a lui.
Șabloanele economisesc memoria doar dacă în ce privește fișierele ce conțin codul sursă deoarece ele ne permit să
minimizăm codul scris.
Șabloanele nu micșorează compilarea modulului, mai degrabă chiar invers, dar simțitor micșorează codul de ieșire.
Șabloanele clasei pot fi moștenite, așa ca și cele obișnuite, cu aceasta, și acel de bază, așa și a cel derivat pot fi clase
obișnuite.