Sunteți pe pagina 1din 9

Ministerul Educatiei din Republica Moldova

Universitatea Tehnica din Moldova


Facultatea Calculatoare, Informatica si Microelectronica

Raport
Lucrare de laborator nr.4
la Programarea Orientată pe Obiecte (POO)
Programare in C++

A efectuat: st.gr CR-181 Ciobanu Mihai

A verificat: M.Osovschi

Chisinau 2019
LUCRARE DE LABORATOR NR. 4

Tema: Moştenirea şi compoziţia


Scopul lucrării:
 studierea moştenirii, avantajele şi dezavantajele;
 studierea compoziţiei;
 studierea regulilor de definire a moştenirii şi compoziţiei;
 studierea formelor de moştenire;
 studierea iniţializatorilor;
 principiul de substituţie;
 moştenirea şi compoziţia – ce să alegem.

а) De creat o ierarhie a claselor clădire – administrarea clădirii – clădire de locuit. Determinaţi


fluxul de ieşire şi fluxul de intrare, constructorul de copiere, operatorul de atribuire prin funcţia
corespunzătoare a clasei de bază.
b) De creat clasa student, care are un nume, specialitate, anul de învăţământ şi balul mediu.
Determinaţi funcţia de definire, schimbare a datelor şi comparare. Pentru sarcina câmpurilor
textuale se foloseşte operatorul new. Determinaţi constructorul, destructorul şi alte funcţii
necesare. Creaţi clasa grupa, care conţine studenţi (o cantitate nelimitată). Definiţi metodele de
adăugare şi eliminare a studenţilor, determinarea balului mediu pe grupă, constructorii,
destructorii şi alte funcţii necesare.
Codul programului (a) :
#include <iostream>
#include <string>
#include <cstring>

using namespace std;

class Cladire
{
protected:
char adress[100];
int nr_etaj;
int nr_loc;

public:
Cladire () : nr_etaj(0), nr_loc(0)
{}

Cladire(const Cladire &c)


{
strcpy(this -> adress, c.adress);
this -> nr_etaj = c.nr_etaj;
this -> nr_loc = c.nr_loc;
}
friend istream& operator>>(istream &in, Cladire &c)
{
cout << "Introduceti adresa >> ";
in >> c.adress;
cout << "Introduceti numarul de etaje >> ";
in >> c.nr_etaj;
cout << "Introduceti numarul de locuitori >> ";
in >> c. nr_loc;
return (in);
}

friend ostream& operator<<(ostream &out, Cladire &c)


{
return out << "Adresa >> " << c.adress << endl
<< "Nb. etaje >> " << c.nr_etaj << endl
<< "Nb. loc >> " << c.nr_loc << endl;
}

};

class Adm_cladire : public Cladire


{
char admin[100];
int nb_office;

public:
Adm_cladire() : nb_office(0)
{}

Adm_cladire(const Adm_cladire &c)


{
strcpy(this -> admin, c.admin);
this -> nb_office = c.nb_office;
}

friend istream& operator>>(istream &in, Adm_cladire &c)


{
cout << "Introduceti numele administratorului >> ";
in >> c.admin;
cout << "Introduceti numarul oficiului >> ";
in >> c.nb_office;
return (in);
}

friend ostream& operator<<(ostream &out, Adm_cladire &c)


{
return out << "Admin >> " << c.admin << endl
<< "Nb. oficiu >> " << c.nb_office << endl;
}
};

class Loc_cladire : public Cladire


{
char name_loc[100];
int nb_cam;

public:
Loc_cladire() : nb_cam(0)
{}

Loc_cladire(const Loc_cladire &c)


{
strcpy(this -> name_loc, c.name_loc);
this -> nb_cam;
}

friend istream& operator>>(istream &in, Loc_cladire &c)


{
cout << "Introduceti numele locatarului >> ";
in >> c.name_loc;
cout << "Introduceti numarul camerei >> ";
in >> c.nb_cam;
return (in);
}

friend ostream& operator<<(ostream &out, Loc_cladire &c)


{
return out << "Locuitor >> " << c.name_loc << endl
<< "Nb. camera >> " << c.nb_cam << endl;
}
};

int main()
{
Cladire c1;
Adm_cladire c2;
Loc_cladire c3;

cin >> c1;


cin >> c2;
cin >> c3;
cout << c1;
cout << c2;
cout << c3;

system ("pause");
return (0);
}
Codul programului (b) :
#include <iostream>
#include <string>

using namespace std;

class Student
{
public:
string name;
string spec;
float mark;

void ft_define()
{
cout << "\nIntroduceti datele studentului " << endl;
cout << "Numele >> " << endl;
cin >> name;
cout << "Specialitatea >> " << endl;
cin >> spec;
cout << "Balul mediu >> " << endl;
cin >> mark;
}

void ft_del()
{
name = '0';
spec = '0';
mark = 0;
}

friend ostream &operator<<(ostream &os, Student &s)


{
return os << "\nNumele studentului : " << s.name << endl <<
"Specialitatea : " << s.spec << endl << "Balul mediu : " << s.mark <<
endl;
}
};

class Group : public Student


{
public:
Student *group;
int count;
int index;

Group() : group(NULL), count(0), index(0) {}

Group(int count)
{
group = new Student[count];
this->count = count;
index = 0;
}

~Group()
{
delete [] group;
count = 0;
}

void ft_add()
{
group[index].ft_define();
index++;
}

void ft_delete()
{
int i;
cout << "Introduce indexul studentului pentru stergere" << endl;
cin >> i;
group[i].ft_del();
}

void ft_modify()
{
int i;
cout << "Introduceti indexul studentului pentru modificare dateleor" <<
endl;
cin >> i;
group[i].ft_define();
}

float ft_medmark()
{
float sum = 0;
float med = 0;
int i = -1;
while (++i < count)
sum += group[i].mark;
return (med = sum/count);
}

friend ostream &operator<<(ostream &out, Group &g)


{
int i = 0;
float sum = 0;
float med = 0;
out << "Show:" << endl;
while (i < g.index)
{
if (g.group[i].name == "0" && g.group[i].spec == "0" &&
g.group[i].mark == 0)
{
i++;
continue ;
}
cout << "**Studentul > " << i << endl;
out << g.group[i] << endl;
i++;
}
out << "Media:" << endl;
i = -1;
while (++i < g.index)
sum += g.group[i].mark;
med = sum/g.index;
out << med << endl;
return out;
}
};

int main()
{
char choice;
int n;

cout << "**Crearea grupei de studenti:" << endl;


cout << "Introduceti marimea grupei" << endl;
cin >> n;
Group group(n);

while (1)
{
system("cls");
cout << "[1]. Adaugati cite un student." << endl;
cout << "[2]. Eliminati cite un student." << endl;
cout << "[3]. Modificati datele unui student." << endl;
cout << "[4]. Afisarea grupei." << endl;
cout << "[0]. Exit" << endl;
cin >> choice;

if (choice <= '4')


{
if (choice == '0')
break;
if (choice == '1')
group.ft_add();
if (choice == '2')
group.ft_delete();
if (choice == '3')
group.ft_modify();
if (choice == '4')
cout << group;
}
else
cout << "Bad choice !!!" << endl;
system("pause");
}
system("pause");
return (0);
}
Demonstratea programului (a):

Demonstratea programului (b):


Concluzie:

Efectuând lucrarea de laborator s-a pus baza aplicarii in practica a cunostintelor teoretice
referitoare la mostenire. Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++
referitor la manipularea claselor.