Sunteți pe pagina 1din 13

Ministerul Educaţiei ,Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare,Informatică și Microelectronică
Departamentul Informatică și Ingineria Sistemelor

RAPORT
Lucrarea de laborator Nr.4
Varianta:8
Tema:”Mostenirea si compozitia”

Diciplina:,,Programarea Orientata pe Obiecte”

A efectuat: st. gr.MN-181 Moraru Cristian

A verificat: dr., conf.univ. Osovschi Mariana

2019
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.

Sarcina Lucrarii:
а) Să se creeze ierarhia de clase bloc de studiu - clasa de bază abstractă şi instituţie preşcolară,
instituţie şcolară medie şi instituţie de învăţămînt superior – clase derivate. Să se supraîncarce
fluxul de ieşire şi fluxul de intrare, să se definească constructorul de copiere, operatorul de atribuire
prin funcţiile corespunzătoare ale clasei de bază.
b) Să se creeze clasa motor, care are o firmă producătoare, tip şi putere. Determinaţi funcţiile de
setare, de schimbare a parametrilor motoarelor. Creaţi o ierarhie a claselor: corabie – clasa de bază
şi vapor pentru pasageri – derivată. Corabia are un motor, capacitate de încărcare, măsurător de
apă, denumire, portul unde este înscris. Pentru setarea cîmpurilor textuale, utilizaţi operatorul new.

a) Codul Programului:
#include <iostream>
#include <string.h>

using namespace std;

class bloc_de_studiu
{
protected:
char adress[100];
int nr_inst_invat;
int nr_student;

public:
bloc_de_studiu () : nr_inst_invat(0), nr_student(0)
{}

bloc_de_studiu(const bloc_de_studiu &c)


{
strcpy(this -> adress, c.adress);
this -> nr_inst_invat = c.nr_inst_invat;
this -> nr_student = c.nr_student;
}

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


{
cout << "Introduceti adresa >> ";
in >> c.adress;
cout << "Introduceti numarul de instit. de invatamant >> ";
in >> c.nr_inst_invat;
cout << "Introduceti numarul de studenti >> ";
in >> c. nr_student;
return (in);
}

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


{
return out << "Adresa >> " << c.adress << endl
<< "Nr. institutii este: >> " << c.nr_inst_invat << endl
<< "Nr. student >> " << c.nr_student << endl;
}

};

class inst_presc : public bloc_de_studiu


{
char nume_inst[100];
int nr_elevi;

public:
inst_presc() : nr_elevi(0)
{}

inst_presc(const inst_presc &c)


{
strcpy(this -> nume_inst, c.nume_inst);
this -> nr_elevi = c.nr_elevi;
}

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


{
cout << "Introduceti numele institutiei prescolare >> ";
in >> c.nume_inst;
cout << "Introduceti numarul de elevi >> ";
in >> c.nr_elevi;
return (in);
}

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


{
return out << "inst_prescolara are numele: >> " << c.nume_inst << endl
<< "Nr. elevi: >> " << c.nr_elevi << endl;
}
};

class inst_medie : public bloc_de_studiu


{
char name_medie[100];
int nr_cab;

public:
inst_medie() : nr_cab(0)
{}

inst_medie(const inst_medie &c)


{
strcpy(this -> name_medie, c.name_medie);
this -> nr_cab;
}

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


{
cout << "Introduceti numele scolii medii >> ";
in >> c.name_medie;
cout << "Introduceti numarul de cabinete >> ";
in >> c.nr_cab;
return (in);
}

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


{
return out << "Institutia medie are numele: >> " << c.name_medie <<
endl
<< "Nr. cabinete este: >> " << c.nr_cab << endl;
}
};

class inst_super : public bloc_de_studiu


{
char name_super[100];
int nr_lab;

public:
inst_super() : nr_lab(0)
{}

inst_super(const inst_super &c)


{
strcpy(this -> name_super, c.name_super);
this -> nr_lab;
}

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


{
cout << "Introduceti numele institutiei de inv. superior >> ";
in >> c.name_super;
cout << "Introduceti numarul de laboratoare ce se gasesc in inst. >> ";
in >> c.nr_lab;
return (in);
}

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


{
return out << "Institutia superioara are numele: >> " << c.name_super
<< endl
<< "Nr. de cab. de laboratoar este: >> " << c.nr_lab << endl;
}
};

int main()
{
bloc_de_studiu c1;
inst_presc c2;
inst_medie c3;
inst_super c4;

cin >> c1;


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

system ("pause");
return (0);
}
Rezultatul Programului:

b) Codul Programului:
#include <iostream>

#include <string.h>

using namespace std;

class motor

public:

string name;

string port;

float capacit;

float cap_motor;

string tip;

void ft_define()

cout << "\nIntroduceti denumirea corabiei " << endl;

cout << "Denumirea este: >> " << endl;

cin >> name;

cout << "Inscrisa in portul? >> " << endl;

cin >> port;


cout << "Capacitatea de incarcare cu pasageri este? >> " << endl;

cin >> capacit;

cout << "Are un motor cu puterea de? >> " << endl;

cin >> cap_motor;

cout << "De ce tip este? >> " << endl;

cin >> tip;

void ft_del()

name = '0';

port = '0';

capacit = 0;

cap_motor = 0;

tip = '0';

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

return os << "\n Denumirea corabiei este : " << s.name << endl << "Denumirea portului
este : " << s.port << endl << "Capacitatea de incarcare este : " << s.capacit << endl << "\n Are un
motor cu o putere de : " << s.cap_motor << endl << "\n Este de tip: : " << s.tip << endl;

};

class Corabie : public motor

public:

motor *corabie;

int count;

int pasager;

Corabie() : corabie(NULL), count(0), pasager(0) {}


Corabie(int count)

corabie = new motor[count];

this->count = count;

pasager = 0;

~Corabie()

delete [] corabie;

count = 0;

void ft_add()

corabie[pasager].ft_define();

pasager++;

void ft_delete()

int i;

cout << "Introduce numarul corabiei care doresti sa o elimini" << endl;

cin >> i;

corabie[i].ft_del();

void ft_modify()

int i;

cout << "Introduceti numarul corabiei pentru modificare dateleor" << endl;
cin >> i;

corabie[i].ft_define();

float ft_medpas()

float sum = 0;

float med = 0;

int i = -1;

while (++i < count)

sum += corabie[i].capacit;

return (med = sum/count);

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

int i = 0;

float sum = 0;

float med = 0;

out << "Afisare:" << endl;

while (i < g.pasager)

if (g.corabie[i].name == "0" && g.corabie[i].port == "0" && g.corabie[i].capacit


== 0)

i++;

continue ;

cout << "**Corabia > " << i << endl;

out << g.corabie[i] << endl;

i++;

out << "Media de pasageri a corabilor este:" << endl;


i = -1;

while (++i < g.pasager)

sum += g.corabie[i].capacit;

med = sum/g.pasager;

out << med << endl;

return out;

};

int main()

char choice;

int n;

cout << "**Crearea tipurilor de corabii:" << endl;

cout << "Introduceti numarul de corabii ce pot fi create" << endl;

cin >> n;

Corabie corabie(n);

while (1)

system("cls");

cout << "[1]. Adaugati o corabie noua." << endl;

cout << "[2]. Eliminati corabia." << endl;

cout << "[3]. Modificati datele uneia dintre corabii." << endl;

cout << "[4]. Afisarea corabiilor." << endl;

cout << "[0]. Iesire" << endl;

cin >> choice;

if (choice <= '4')

{
if (choice == '0')

break;

if (choice == '1')

corabie.ft_add();

if (choice == '2')

corabie.ft_delete();

if (choice == '3')

corabie.ft_modify();

if (choice == '4')

cout << corabie;

else

cout << "Alegere gresita !!!" << endl;

system("pause");

system("pause");

return (0);}

Rezultatul Programului:
Dupa modificare:

Dupa eliminare:

Concluzie:

 In rezultatul elaborarii lucrarii date s-a pus baza aplicarii in practica a cunostintelor
teoretice referitoare la mostenirea multipla.
 Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++ referitor la
manipularea claselor.

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