Professional Documents
Culture Documents
Ministerul Educaţiei Al Republicii Moldova: La Programarea Orientata Pe Obiecte
Ministerul Educaţiei Al Republicii Moldova: La Programarea Orientata Pe Obiecte
RAPORT
A efectuat:
A verificat:
Chişinău -2019
Tema:Moştenirea multiplă
Scopul lucrării:
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;
}
};
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::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;
}
};
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.