Sunteți pe pagina 1din 7

MINISTERUL EDUCAŢIEI, CULTURII ȘI CERCETĂRII AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea Calculatoare, Informatică şi Microelectronică

Departamentul

Informatică și Ingineria Sistemelor

REFERAT
la lucrarea de laborator nr.7

Tema: „Șabloane”

Disciplina: „Programarea orientată pe obiecte”

A elaborat st. gr.IBM-181, Burdeniuc Alexandru

A verificat conf. univ., dr. Oșovschi Mariana

Chișinău 2019
Varianta 14

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;

Sarcina lucrării:

а) Creaţi o funcţie şablon, care schimbă ordinea elementelor după perechi. De


exemplu: 1 2 3 4 5 6 - 2 1 4 3 6 5. Funcţia trebuie să lucreze cu masive de lungimi
diferite. Dacă numărul de elemente este impar, atunci ultemul element nu
trebuie de prelucrat.

b) Creaţi clasa parametrizată Vector. Clasa trebuie să conţină constructorii,


destructorii, şi deasemenea funcţiile getLength, operatorii [], +, - şi operatorii de
intrare/ieşire. Pentru alocarea memoriei să se utilizeze operatorul new.

a)

#include <iostream>

using namespace std;

template <typename T>


void schimba_ordinea_perechilor(T *arr, int size) {
for(int i = 0; i < size - 1; i += 2) {
T temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}

int main() {
int d;
cout << "Vector int dimensiune: ";
cin >> d;
int int_vec[d];
for(int i = 0; i < d; i++) {
cout << "int_vec[" << i << "] = ";
cin >> int_vec[i];
cout << endl;
}
cout << "Int vector: ";
for(int i = 0; i < d; i++){
cout << int_vec[i] << " ";
}
schimba_ordinea_perechilor(int_vec, d);
cout << endl;
cout << "Int vector dupa schimbare: ";
for(int i = 0; i < d; i++){
cout << int_vec[i] << " ";
}

cout << endl << "Vector char dimensiune: ";


cin >> d;
char char_vec[d];
for(int i = 0; i < d; i++) {
cout << "char_vec[" << i << "] = ";
cin >> char_vec[i];
cout << endl;
}
cout << "Char vector: ";
for(int i = 0; i < d; i++){
cout << char_vec[i] << " ";
}
schimba_ordinea_perechilor(char_vec, d);
cout << endl;
cout << "Char vector dupa schimbare: ";
for(int i = 0; i < d; i++){
cout << char_vec[i] << " ";
}
}
b)

#include <iostream>

using namespace std;

template <class T> //se formeaza clasa parametrizata


class Vector {
private:
T *data;
int size;
public:
Vector() {
data = new T;
size = 1;
}
Vector(int s) {
data = new T[s];
size = s;
}

int getLenght();

T operator[](int loc);

Vector<T>& operator+(T a);


Vector<T>& operator-(T a);

template <typename S> friend


ostream& operator<<(ostream& out, Vector<S>& obj);

template <typename S> friend


istream& operator>>(istream& in, Vector<S>& obj);

~Vector();
};

template <class T>


int Vector<T>::getLenght() {
return size;
}

template <class T>


T Vector<T>::operator[](int loc) {
return this->data[loc];
}

template <class T>


Vector<T>& Vector<T>::operator+(T a) {
Vector<T> *temp = new Vector<T>(this->getLenght());
for(int i = 0; i < this->getLenght(); i++) {
temp->data[i] = this->data[i] + a;
}
return *(temp);
}

template <class T>


Vector<T>& Vector<T>::operator-(T a) {
Vector<T> *temp = new Vector<T>(this->getLenght());
for(int i = 0; i < this->getLenght(); i++) {
temp->data[i] = this->data[i] - a;
}
return *(temp);
}

template <typename S>


ostream& operator<<(ostream& out, Vector<S>& obj) {
for(int i = 0; i < obj.getLenght(); i++)
out << obj.data[i] << " ";
out << endl;
return out;
}

template <typename S>


istream& operator>>(istream& in, Vector<S>& obj) {
for(int i = 0; i < obj.getLenght(); i++) {
cout << "[" << i << "] = ";
in >> obj.data[i];
}
return in;
}

template <class T>


Vector<T>::~Vector() {
delete [] data;
}

int main() {
cout << "Vector v1 cu valori de tip int." << endl;
int d;
cout << "Introduceti dimensiunea: ";
cin >> d;
Vector<int> v1(d);
cin >> v1;
cout << v1;

cout << "Vector v2 cu valori de tip int." << endl;


cout << "Introduceti dimensiunea: ";
cin >> d;
Vector<int> v2(d);
cin >> v2;
cout << v2;
cout << "v1 = v2 + 5" << endl;
v1 = v2 + 5;
cout << v1;

cout << "Vector v3 cu valori de tip char." << endl;


cout << "Introduceti dimensiunea: ";
cin >> d;
Vector<char> v3(d);
cin >> v3;
cout << v3;

Concluzia: În urma efectuării lucrării de laborator am făcut cunoștință cu clasele


șablon și cu funcțiile șablon. Am studiat regulile de definire și utilizare a
șabloanelor.

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