Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.1.
la Programarea orientată pe obiecte
A efectuat:
st. gr. RM-211 Dascal Sergiu
A verificat:
dr., conf. univ. M. Kulev
Chişinău -2022
LUCRARE DE LABORATOR NR. 2
Tema: Constructorul – funcţie de iniţializare a obiectelor clasei
Scopul lucrării:
• Studierea principiilor de definire şi utilizare a constructorilor
• Studierea principiilor de definire şi utilizare a destructorilor
• Studierea tipurilor de constructori
Sarcina
Varianta 11
а) Să se creeze clasa Group – grupa, care conţine informaţia despre codul grupei,
specialitatea, numărul de studenţi, curatorul grupei şi anul de studii. Să se utilizeze
memoria dinamică pentru setarea cîmpurilor textuale. Să se definească: toate
tipurile de constructori; funcţiile de schimbare a curatorului şi a numărului de
studenţi. Să se definească funcţia de setare a anului de studii în aşa fel, încît
valoarea acestui cîmp să poată fi mărită şi să nu depăşească cifra 5.
b) Să se creeze clasa Matrix – matrice. Clasa conţine pointer spre char, numărul de
rînduri şi de coloane şi o variabilă – codul erorii. Să se definească constructorul
fără parametri (constructorul implicit), constructorul cu un parametru – matrice
pătrată şi constructorul cu doi parametri – matrice dreptunghiulară ş. a. Să se
definească funcţiile membru de acces: returnarea şi setarea valorii elementului (i,j).
Să se definească funcţiile de adunare şi scădere a două matrice; înmulţirea unei
matrice cu alta; înmulţirea unei matrice cu un număr. Să se testeze funcţionarea
clasei. În caz de insuficienţă de memorie, necorespondenţă a dimensiunilor
matricelor, depăşire a limitei memoriei utilizate să se stabilească codul erorii.
Întrebări de control:
1. Explicaţi termenul de iniţializare.
2. Ce cuvinte cheie se utilizează pentru definirea constructorului şi a
destructorului?
3. Poate oare un constructor să returneze o valoare?
4. Pot oare să existe clase fără constructori?
5. Cîţi constructori poate conţine o clasă? Dar destructori? De ce?
6. Enumeraţi tipurile de constructori?
7. Cum se apelează un constructor?
8. De ce este nevoie de definit un constructor de copiere?
9. De ce este nevoie de definit un constructor de conversie a tipului?
10. În ce cazuri se apelează constructorul de copiere? Care este sintaxa apelului?
11. Ce sunt listele de iniţializare (iniţializatori)?
12. În care caz se defineşte obligatoriu constructorul implicit?
Codul programului in limbajul C++:
Partea (a) :
#include <iostream>
#include <conio.h>
#include <cstring>
using namespace std;
class Group
{
public:
char speciality[50];
int n_students;
char curator[50];
int study_year;
Group() {} //Constructor prestabilit
Group(char *sp, int ns, char *cr, int sty) //Constructor cu parametri
{
strcpy(this->speciality,sp);
n_students=ns;
strcpy(curator,cr);
study_year=sty;
}
Group(Group &c) //constructor de copiere
{
strcpy(speciality,c.speciality);
n_students=c.n_students;
strcpy(curator,c.curator);
study_year=c.study_year;
}
~Group() { } //destructor
friend
void create(Group &gr);
void change(Group &gr);
void show(void);
void sum(Group &c1, Group &c2)
{
strcpy(speciality,c1.speciality);
n_students=c1.n_students+c2.n_students;
strcpy(curator,c1.curator);
study_year=c1.study_year+c2.study_year;
}
};
void Group::show(void)
{
cout<<"\nSpecialitatea grupei : "<<this->speciality<<endl;
cout<<"Numarul de studenti : "<<this->n_students<<endl;
cout<<"Curatorul grupei : "<<this->curator<<endl;
cout<<"Anul de studii : "<<this->study_year<<endl;
}
int main(){
Group C2;
create(C2);
cout<<"\n Constructor cu parametri :";
C2.show();
cout<<"\n Constructor de copiere :";
Group C3(C2);
C3.show();
C3.~Group();
cout<<"\n Utilizare Constructor prestabilit :";
Group C1;
C1.sum(C2,C3);
C1.show();
C1.~Group();
C2.~Group();
int f;
cout<<"\n Doriti sa modificati curatorul sau numarul de studenti? :";
scanf("%d", &f);
if(f)
{
change(C2);
}
}
Rezultatul Programului :
Partea (b) :
#include <iostream>
using namespace std;
class Matrix
{
public:
int Tab[50][50];
int line;
int column;
public:
Matrix();
Matrix(int);
Matrix(int, int);
Matrix(const Matrix&);
~Matrix();
void f_set_matr();
void f_show();
void f_addition(const Matrix &matrix);
void f_subtract(const Matrix &matrix);
void f_multipl_matrix(const Matrix &matrix);
void f_multipl_num(int value);
};
int g_size;
Matrix::Matrix() : line(0), column(0) {}
Matrix::Matrix(int line, int column) : line(line),
column(column)
{
int i, j;
if ((line >= 0) && (column >= 0))
{
for (i = 0; i < line; i++)
for (j = 0; j < column; j++)
Tab[i][j] = 0;
}
else
cout << "Error. Matrix are not positive !!" << endl;
}
Matrix::~Matrix()
{
int i;
for(i = 0; i < line; ++i)
delete [] Tab;
line = 0;
column = 0;
}
void Matrix::f_set_matr()
{
int i, j;
for (i = 0; i < line; i++)
for (j = 0; j < column; j++)
{
cout << " Matrix["<<i<<"]["<<j<<"]=";
cin >>Tab[i][j];
}
}
void Matrix::f_show()
{
int i, j;
for (i = 0; i < line; i++)
{
for (j = 0; j < column; j ++)
cout << "\t" << Tab[i][j] << "\t";
cout << endl;
}
}
void f_menu()
{
Matrix m1, m2;
int ml_nr;
cout << "\tInput first matrix !!\n" << endl;
cout << "**Lines = ";
cin >> m1.line;
cout << "**Columns = ";
cin >> m1.column;
Matrix matrix1(m1.line, m1.column);
matrix1.f_set_matr();
system ("pause");
system ("cls");
cout << "\tInput second matrix !!\n" << endl;
cout << "**Lines = ";
cin >> m2.line;
cout << "**Columns = ";
cin >> m2.column;
Matrix matrix2(m2.line, m2.column);
matrix2.f_set_matr();
system ("pause");
system ("cls");
cout << "***First Matrix:" << endl;
matrix1.f_show();
cout << "\n***Second Matrix:" << endl;
matrix2.f_show();
Matrix matrix3 = matrix1;
Matrix matrix4 = matrix1;
Matrix matrix5 = matrix1;
cout << "\n***Matrix addition:" << endl;
matrix1.f_addition(matrix2);
matrix1.f_show();
cout << "\n***Matrix subtraction: (matrix1 - matrix2)" <<
endl;
matrix4.f_subtract(matrix2);
matrix4.f_show();
cout << "\n***Matrix multiplication:\n" << endl;
matrix5.f_multipl_matrix(matrix2);
matrix5.f_show();
cout << "\n***Multiply first matrix with number"<< endl;
cout << "**Imput number >>> ";
cin >> ml_nr;
cout << endl;
matrix3.f_multipl_num(ml_nr);
matrix3.f_show();
system("pause");
exit(0);
}
int main()
{
f_menu();
return (0);
}
Rezultatul programului :
Analiza rezultatelor și concluzii:
1. Au fost obţinute deprinderi de elaborare, compilare, rulare și testare a unui
program ce contine tablou unidimensional în limbajul de programare C.
2. Programul da rezultate corecte, veridice din punct de vedere matematic.
3. Programul exclude probabilitatea situatiilor de conflict, cind structura
contine zero elemente.
4. Programul verifica optiunile alese anterior si exclude efectuarea pasilor
inutili sau imposibili.
5. Programul elaborat acorda utilizatorului un sir de optiuni din care el poate
alege.