Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 20

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-181 Patras Cristi

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 2
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);
}

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);
}

You might also like