You are on page 1of 21

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT

Lucrarea de laborator nr.5

La Programarea orientata pe obiecte

A efectuat:

st. gr. CR-182 Mardari Ion

A verificat:

lector,univ. Oșovschi Mariana

Chişinău -2019
Tema:Moştenirea multiplă

Scopul lucrării:

 Studierearegulilor de determinare a moştenirii multiple;


 Studiereaavantajelorşineajunsurilormoştenirii multiple;
 Probleme legate de utilizareamoştenirii multiple;
 Studierea rezolvării problemelor;
Varianta 6
a) Să se creeze, o ierarhie de moştenire: avion, corabie–elicopter de apă.
b) Să se creeze, o ierarhie de moştenire: transport - elicopter, corabie - elicopter de apa.

A)

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

class Avion
{
int Dinamic;
public:
Avion(int Dinamic=0)
{
this->Dinamic=Dinamic;
}
~Avion()
{
}
void SedDinA(int Dinamic)
{
this->Dinamic=Dinamic;
}
int GetDinA()
{
return Dinamic;
}
};

class Corabie
{
int Dinamic;
public:
Corabie(int Dinamic=0)
{
this->Dinamic=Dinamic;
}
~Corabie()
{
}
void SedDinC(int Dinamic)
{
this->Dinamic=Dinamic;
}
int GetDinC()
{
return Dinamic;
}
};

class ElicopterDeApa : Avion, Corabie


{
int nr;
char *tip;
char *model;
int mode;
float motor;
public:
ElicopterDeApa(int nr=0, char tip[4]="Tip", char model[6]="Model", int
mode=0, float motor=0, int Dinamic1=0, int Dinamic2=0) : Avion(Dinamic1),
Corabie(Dinamic2)
{
this->nr=nr;
this->mode=mode;
this->motor=motor;
this->tip=new char[strlen(tip)+1];
strcpy(this->tip,tip);
this->model=new char[strlen(model)+1];
strcpy(this->model,model);
}
~ElicopterDeApa()
{
delete []tip;
delete []model;
}
void Print();
void ChangeAv(int Dinamic);
void ChangeCo(int Dinamic);
void SetData(int nr, char *tip, char *model, int mode, float motor, int
Dinamic1, int Dinamic2);
float ReturnCub()
{
return motor;
}
};

void ElicopterDeApa::SetData(int nr, char *tip, char *model, int mode, float
motor, int Dinamic1, int Dinamic2)
{
this->nr=nr;
this->mode=mode;
this->motor=motor;
this->tip=new char[strlen(tip)+1];
strcpy(this->tip,tip);
this->model=new char[strlen(model)+1];
strcpy(this->model,model);
SedDinA(Dinamic1);
SedDinC(Dinamic2);
}

void ElicopterDeApa::ChangeAv(int Dinamic)


{
SedDinA(Dinamic);
}

void ElicopterDeApa::ChangeCo(int Dinamic)


{
SedDinC(Dinamic);
}

void ElicopterDeApa::Print()
{
cout<< "Tipultransportuluieste : " << tip <<endl;
cout<< "Modeluleste : " << model<<endl;
cout<< "Numarul de locuri : " << nr<<endl;
switch(mode)
{
case 0 : cout<< "Transportuleste : Pasnic" <<endl; break;
case 1 : cout<< "Transportuleste : De razboi" <<endl; break;
}
if(GetDinA()!=0)
{
cout<< "Transportulposeda de : Aerodinamica" <<endl;
}
if (GetDinC()!=0)
{
cout<< "Transportulposeda de : Hidrodinamica" <<endl;
}
cout<< "Cubaturamotoruluieste de : " << motor << "cm^3" <<endl;
}

int main()
{
int n, nr, mode, Dinamic1, Dinamic2;
char tip[30], model[30];
float motor;
int menu;
int alegere;
cout<< "Introducetinumarul de transporturi pe care doritisa le creati :
"<<endl;
cin>> n;
ElicopterDeApa ** El= new ElicopterDeApa*[n];
for(int i=0; i<n; i++)
{
system("cls");
cout<< "Introducetiinformatipentrutransportul : " << i+1 <<endl;
cout<< "Introduceticefel de transport este : " <<endl;
cin>> tip;
cout<< "Introducetimodelulacestuia " <<endl;
cin>> model;
cout<< "Alegeti de cefel de tip estetransportui (0 - Pasnic, 1 - De razboi)"
<<endl;
do
{
cin>> mode;
if(mode<0 || mode>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(mode<0 || mode>1);
cout<< "Introducetinumarul de persoane care pot fi transportate " <<endl;
cin>> nr;
cout<< "Introducetivolumulmotorului in cm^3" <<endl;
cin>> motor;
cout<< "Transportulposeda de Aerodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic1;
if(Dinamic1<0 || Dinamic1>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic1<0 || Dinamic1>1);
cout<< "Transportulposeda de Hidrodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic2;
if(Dinamic2<0 || Dinamic2>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic2<0 || Dinamic2>1);
El[i] = new ElicopterDeApa();
El[i]->SetData(nr, tip, model, mode, motor, Dinamic1, Dinamic2);
}
do
{
system("cls");
cout<< "1) AfiseazaTransportul " <<endl;
cout<< "2) Reseteazainformatiaunui transport din nou " <<endl;
cout<< "3) Adauga un transport nou " <<endl;
cout<< "4) Stergereaunui transport " <<endl;
cout<< "5) Afisareatransportului cu celmai mare volum al motorului" <<endl;
cout<< "0) Exit " <<endl;
cin>> menu;
switch(menu)
{
case 0 :
{
for(int i=0; i<n; i++)
{
delete []El[i];
}
delete []El;
return 0;
}
break;
case 1 :
{
system("cls");
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
cout<< "Transportul : "<< i+1 <<endl;
El[i]->Print();
cout<<endl;
}
}
}
break;
case 2 :
{
system("cls");
cout<< "Alege un transport din celepropuse " <<endl;
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
cout<< "Transportul : "<< i+1 <<endl;
El[i]->Print();
cout<<endl;
}
}
cout<< "\n0) Exit" <<endl;
do
{
cin>>alegere;
if(alegere==0)
{
break;
}
if (alegere<1 || alegere>n)
{
cout<< "Depasirealimiteipropuse " <<endl;
}
}while (alegere<1 || alegere>n);
if(alegere!=0)
{
system("cls");
cout<< "Introduceticefel de transport este : " <<endl;
cin>> tip;
cout<< "Introducetimodelulacestuia " <<endl;
cin>> model;
cout<< "Alegeti de cefel de tip estetransportui (0 - Pasnic, 1 - De razboi)"
<<endl;
do
{
cin>> mode;
if(mode<0 || mode>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(mode<0 || mode>1);
cout<< "Introducetinumarul de persoane care pot fi transportate " <<endl;
cin>> nr;
cout<< "Introducetivolumulmotorului in cm^3" <<endl;
cin>> motor;
cout<< "Transportulposeda de Aerodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic1;
if(Dinamic1<0 || Dinamic1>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic1<0 || Dinamic1>1);
cout<< "Transportulposeda de Hidrodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic2;
if(Dinamic2<0 || Dinamic2>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic2<0 || Dinamic2>1);
El[alegere-1]->SetData(nr, tip, model, mode, motor,
Dinamic1, Dinamic2);
}
}
break;
case 3 :
{
system("cls");
n=n+1;
El = (ElicopterDeApa**)realloc(El, sizeof(ElicopterDeApa*));
cout<< "Introduceticefel de transport este : " <<endl;
cin>> tip;
cout<< "Introducetimodelulacestuia " <<endl;
cin>> model;
cout<< "Alegeti de cefel de tip estetransportui (0 - Pasnic, 1 - De razboi)"
<<endl;
do
{
cin>> mode;
if(mode<0 || mode>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(mode<0 || mode>1);
cout<< "Introducetinumarul de persoane care pot fi transportate " <<endl;
cin>> nr;
cout<< "Introducetivolumulmotorului in cm^3" <<endl;
cin>> motor;
cout<< "Transportulposeda de Aerodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic1;
if(Dinamic1<0 || Dinamic1>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic1<0 || Dinamic1>1);
cout<< "Transportulposeda de Hidrodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic2;
if(Dinamic2<0 || Dinamic2>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic2<0 || Dinamic2>1);
El[n-1] = new ElicopterDeApa();
El[n-1]->SetData(nr, tip, model, mode, motor, Dinamic1,
Dinamic2);
}
break;
case 4 :
{
system("cls");
cout<< "Alege un transport din celepropuse " <<endl;
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
cout<< "Transportul : "<< i+1 <<endl;
El[i]->Print();
cout<<endl;
}
}
cout<< "0) Exit" <<endl;
do
{
cin>>alegere;
if(alegere==0)
{
break;
}
if (alegere<1 || alegere>n)
{
cout<< "Depasirealimiteipropuse " <<endl;
}
}while (alegere<1 || alegere>n);
if(alegere!=0)
{
delete El[alegere-1];
El[alegere-1]=NULL;
}
}
break;
case 5 :
{
system("cls");
motor=El[0]->ReturnCub();
nr=0;
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
if(El[i]->ReturnCub()>motor)
{
motor=El[i]->ReturnCub();
nr=i;
}
}
}
cout<< "Transpurul cu celmai mare volum al motoruluieste : " <<endl;
El[nr]->Print();
}
}
system("pause");
}while (menu!=0);
}

Rezultatele rularii
B)

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

class Transport
{
int morisca;
float motor;
int nr;
public:
Transport(int morisca=-1, float motor=0, int nr=0)
{
this->morisca=morisca;
this->motor=motor;
this->nr=nr;
}
~Transport()
{
}
void ChangeMor(int morisca)
{
this->morisca=morisca;
}
void ChangeMot(float motor)
{
this->motor=motor;
}
void ChangeNr(int nr)
{
this->nr=nr;
}
float ReturnMotor()
{
return motor;
}
int ReturnNr()
{
return nr;
}
int RetunrMor()
{
return morisca;
}
};

class Elicopter : virtual public Transport


{
int Dinamic;
public:
Elicopter(int Dinamic=0, int morisca=-1, float motor=0, int nr=0) :
Transport(morisca, motor, nr)
{
this->Dinamic=Dinamic;
}
~Elicopter()
{
}
void SedDinA(int Dinamic)
{
this->Dinamic=Dinamic;
}
int GetDinA()
{
return Dinamic;
}
};

class Corabie : virtual public Transport


{
int Dinamic;
public:
Corabie(int Dinamic=0, int morisca=-1, float motor=0, int nr=0) :
Transport(morisca, motor, nr)
{
this->Dinamic=Dinamic;
}
~Corabie()
{
}
void SedDinC(int Dinamic)
{
this->Dinamic=Dinamic;
}
int GetDinC()
{
return Dinamic;
}
};

class ElicopterDeApa : public Elicopter, public Corabie


{
int nr;
char *tip;
char *model;
int mode;
public:
ElicopterDeApa(int nr=0, char tip[4]="Tip", char model[6]="Model", int
mode=0, int Dinamic1=0, int Dinamic2=0, int morisca=-1, float motor=0, int
nr2=0) : Elicopter(Dinamic1), Corabie(Dinamic2), Transport(morisca, motor,
nr2)
{
this->nr=nr;
this->mode=mode;
this->tip=new char[strlen(tip)+1];
strcpy(this->tip,tip);
this->model=new char[strlen(model)+1];
strcpy(this->model,model);
}
~ElicopterDeApa()
{
delete []tip;
delete []model;
}
void Print();
void SetData(int nr, char *tip, char *model, int mode, float motor, int
Dinamic1, int Dinamic2, int morisca, int nr2);
float ReturnCub()
{
return Elicopter::ReturnMotor();
}
};

void ElicopterDeApa::SetData(int nr, char *tip, char *model, int mode, float
motor, int Dinamic1, int Dinamic2, int morisca, int nr2)
{
this->nr=nr;
this->mode=mode;
Elicopter::ChangeMot(motor);
this->tip=new char[strlen(tip)+1];
strcpy(this->tip,tip);
this->model=new char[strlen(model)+1];
strcpy(this->model,model);
SedDinA(Dinamic1);
SedDinC(Dinamic2);
Elicopter::ChangeMor(morisca);
Elicopter::ChangeNr(nr2);
}

void ElicopterDeApa::Print()
{
cout<< "Tipultransportuluieste : " << tip <<endl;
cout<< "Modeluleste : " << model<<endl;
cout<< "Numarul de locuri : " << nr<<endl;
switch(mode)
{
case 0 : cout<< "Transportuleste : Pasnic" <<endl; break;
case 1 : cout<< "Transportuleste : De razboi" <<endl; break;
}
if(GetDinA()!=0)
{
cout<< "Transportulposeda de : Aerodinamica" <<endl;
}
if (GetDinC()!=0)
{
cout<< "Transportulposeda de : Hidrodinamica" <<endl;
}
cout<< "Cubaturamotoruluieste de : " <<Elicopter::ReturnMotor() << "cm^3"
<<endl;
cout<< "Trandportulposeda de : " <<Elicopter::ReturnNr() << "Motor(-re)
"<<endl;
if(Elicopter::RetunrMor()==1)
{
cout<< "TractiuneatransportuluiesteexecutataprinintermediulMoristei(-lor)"
<<endl;
}
}

int main()
{
int n, nr, nr2, mode, Dinamic1, Dinamic2, morisca;
char tip[30], model[30];
float motor;
int menu;
int alegere;
cout<< "Introducetinumarul de transporturi pe care doritisa le creati :
"<<endl;
cin>> n;
ElicopterDeApa ** El= new ElicopterDeApa*[n];
for(int i=0; i<n; i++)
{
system("cls");
cout<< "Introducetiinformatipentrutransportul : " << i+1 <<endl;
cout<< "Introduceticefel de transport este : " <<endl;
cin>> tip;
cout<< "Introducetimodelulacestuia " <<endl;
cin>> model;
cout<< "Alegeti de cefel de tip estetransportui (0 - Pasnic, 1 - De razboi)"
<<endl;
do
{
cin>> mode;
if(mode<0 || mode>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(mode<0 || mode>1);
cout<< "Introducetinumarul de persoane care pot fi transportate " <<endl;
cin>> nr;
cout<< "Introducetivolumulmotorului in cm^3" <<endl;
cin>> motor;
cout<< "Transportulposeda de Aerodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic1;
if(Dinamic1<0 || Dinamic1>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic1<0 || Dinamic1>1);
cout<< "Transportulposeda de Hidrodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic2;
if(Dinamic2<0 || Dinamic2>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic2<0 || Dinamic2>1);
cout<< "Transportulposeda de morisca ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>>morisca;
if(morisca<0 || morisca>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(morisca<0 || morisca>1);
cout<< "Introducetinumarul de motoare" <<endl;
cin>> nr2;
El[i] = new ElicopterDeApa();
El[i]->SetData(nr, tip, model, mode, motor, Dinamic1, Dinamic2,
morisca, nr2);
}
do
{
system("cls");
cout<< "1) AfiseazaTransportul " <<endl;
cout<< "2) Reseteazainformatiaunui transport din nou " <<endl;
cout<< "3) Adauga un transport nou " <<endl;
cout<< "4) Stergereaunui transport " <<endl;
cout<< "5) Afisareatransportului cu celmai mare volum al motorului" <<endl;
cout<< "0) Exit " <<endl;
cin>> menu;
switch(menu)
{
case 0 :
{
for(int i=0; i<n; i++)
{
delete []El[i];
}
delete []El;
return 0;
}
break;
case 1 :
{
system("cls");
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
cout<< "Transportul : "<< i+1 <<endl;
El[i]->Print();
cout<<endl;
}
}
}
break;
case 2 :
{
system("cls");
cout<< "Alege un transport din celepropuse " <<endl;
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
cout<< "Transportul : "<< i+1 <<endl;
El[i]->Print();
cout<<endl;
}
}
cout<< "\n0) Exit" <<endl;
do
{
cin>>alegere;
if(alegere==0)
{
break;
}
if (alegere<1 || alegere>n)
{
cout<< "Depasirealimiteipropuse " <<endl;
}
}while (alegere<1 || alegere>n);
if(alegere!=0)
{
system("cls");
cout<< "Introduceticefel de transport este : " <<endl;
cin>> tip;
cout<< "Introducetimodelulacestuia " <<endl;
cin>> model;
cout<< "Alegeti de cefel de tip estetransportui (0 - Pasnic, 1 - De razboi)"
<<endl;
do
{
cin>> mode;
if(mode<0 || mode>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(mode<0 || mode>1);
cout<< "Introducetinumarul de persoane care pot fi transportate " <<endl;
cin>> nr;
cout<< "Introducetivolumulmotorului in cm^3" <<endl;
cin>> motor;
cout<< "Transportulposeda de Aerodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic1;
if(Dinamic1<0 || Dinamic1>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic1<0 || Dinamic1>1);
cout<< "Transportulposeda de Hidrodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic2;
if(Dinamic2<0 || Dinamic2>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic2<0 || Dinamic2>1);
cout<< "Transportulposeda de morisca ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>>morisca;
if(morisca<0 || morisca>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(morisca<0 || morisca>1);
cout<< "Introducetinumarul de motoare" <<endl;
cin>> nr2;
El[alegere-1] = new ElicopterDeApa();
El[alegere-1]->SetData(nr, tip, model, mode, motor,
Dinamic1, Dinamic2, morisca, nr2);
}
}
break;
case 3 :
{
system("cls");
n=n+1;
El = (ElicopterDeApa**)realloc(El, sizeof(ElicopterDeApa*));
system("cls");
cout<< "Introduceticefel de transport este : " <<endl;
cin>> tip;
cout<< "Introducetimodelulacestuia " <<endl;
cin>> model;
cout<< "Alegeti de cefel de tip estetransportui (0 - Pasnic, 1 - De razboi)"
<<endl;
do
{
cin>> mode;
if(mode<0 || mode>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(mode<0 || mode>1);
cout<< "Introducetinumarul de persoane care pot fi transportate " <<endl;
cin>> nr;
cout<< "Introducetivolumulmotorului in cm^3" <<endl;
cin>> motor;
cout<< "Transportulposeda de Aerodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic1;
if(Dinamic1<0 || Dinamic1>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic1<0 || Dinamic1>1);
cout<< "Transportulposeda de Hidrodinamica ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>> Dinamic2;
if(Dinamic2<0 || Dinamic2>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(Dinamic2<0 || Dinamic2>1);
cout<< "Transportulposeda de morisca ? (0 - Nu, 1 - Da)" <<endl;
do
{
cin>>morisca;
if(morisca<0 || morisca>1)
{
cout<< "Depasirealimiteipropuse" <<endl;
}
}while(morisca<0 || morisca>1);
cout<< "Introducetinumarul de motoare" <<endl;
cin>> nr2;
El[n-1] = new ElicopterDeApa();
El[n-1]->SetData(nr, tip, model, mode, motor, Dinamic1,
Dinamic2, morisca, nr2);
}
break;
case 4 :
{
system("cls");
cout<< "Alege un transport din celepropuse " <<endl;
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
cout<< "Transportul : "<< i+1 <<endl;
El[i]->Print();
cout<<endl;
}
}
cout<< "0) Exit" <<endl;
do
{
cin>>alegere;
if(alegere==0)
{
break;
}
if (alegere<1 || alegere>n)
{
cout<< "Depasirealimiteipropuse " <<endl;
}
}while (alegere<1 || alegere>n);
if(alegere!=0)
{
delete El[alegere-1];
El[alegere-1]=NULL;
}
}
break;
case 5 :
{
system("cls");
motor=El[0]->ReturnCub();
nr=0;
for(int i=0; i<n; i++)
{
if(El[i]!=NULL)
{
if(El[i]->ReturnCub()>motor)
{
motor=El[i]->ReturnCub();
nr=i;
}
}
}
cout<< "Transpurul cu celmai mare volum al motoruluieste : " <<endl;
El[nr]->Print();
}
}
system("pause");
}while (menu!=0);
}

Rezultatele rularii

Concluzie

In urma efectuarii acestei lucrari de laborator am luat la cunsotinta faptul cum se lucreaza cu
mostenirea multipla.Astfel am aflat ca  o clasa poate sa mosteneasca mai multe clase de baza,
ceea ce inseamna ca toti membrii claselor de baza vor fi mosteniti de clasa derivate, in aceasta
situatie apare mecanismul mostenirii multiple.

You might also like