Sunteți pe pagina 1din 10

MINISTERUL EDUCAŢIEI, CULTURII ȘI CERCETĂRII AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea Calculatoare, Informatică şi Microelectronică

Departamentul

Informatică și Ingineria Sistemelor

REFERAT
la lucrarea de laborator nr.4

Tema: „Moștenirea și compoziția”

Disciplina: „Programarea orientată pe obiecte”

A elaborat st. gr.IBM-181, Burdeniuc Alexandru

A verificat conf. univ., dr. Oșovschi


Mariana

Chișinău 2019
Varianta 14

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ştenire şi compoziţie

Sarcina lucrării:

а) Să se creeze 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 de
comparare. Pentru setarea câmpurilor textuale să se folosească operatorul new.
Determinaţi constructorii, destructorul şi alte funcţii necesare. Creaţi clasa
derivată student-diplomant, pentru care este definită tema de diplomă. De
asemenea, este necesar de definit toate funcţiile necesare.
b) Să se creeze clasa camera, care conţine suprafaţă. Determinaţi constructorii şi
metodele de acces. Creaţi clasa apartament cu o odaie, care conţine o odaie şi o
bucătarie (suprafaţa ei), etajul (camera este în clasa apartament cu o odaie).
Determinaţi constructorii, metodele de acces. Definiţi clasa derivată a
apartamentelor cu o odaie cu adresă (un câmp adăugător - adresa). Determinaţi
constructorii, destructorul şi fluxul de ieşire.

a)
#include <iostream>
#include <cstdlib>

using namespace std;

class Student{
protected:
char* name = new char[30];
char* branch = new char[30];
int year = 1;
double avg = -1;
public:
Student():
name((char* )"\0"), branch((char* )"\0"), year(1), avg(-1){ };
Student(const char* n, const char *d, int y, double a):
name((char* )n), branch((char* )d), year(y), avg(a){ }
~Student();
char* getName() const;

char* getBranch() const;

int getYear() const;

double getAverage() const;

void setName(const char*);

void setBranch(const char*);

void setYear(const int);

void setAverage(const double);

virtual void print() const;

bool operator>(const Student&);

bool operator>=(const Student&);

bool operator<(const Student&);

bool operator<=(const Student&);


};

class Student_diplomant: public Student{


private:
char* diplom = new char[30];
public:
Student_diplomant(): diplom((char* )"\0"),
Student(){};
Student_diplomant(const char* n, const char *d, int y, double a, const char*
dip):
diplom((char* )dip),
Student((char* )n, (char* )d, y, a){};
char* getDiplom() const;
virtual void print() const;
};

Student::~Student(){
delete this->name;
delete this->branch;
}

char* Student_diplomant::getDiplom() const{


return this->diplom;
}

char* Student::getName() const{


return this->name;
}

char* Student::getBranch() const{


return this->branch;
}

int Student::getYear() const{


return this->year;
}
double Student::getAverage() const{
return this->avg;
}

void Student::setName(const char* n){


this->name = (char* )n;
}

void Student::setBranch(const char* n){


this->branch = (char* )n;
}

void Student::setYear(const int n){


this->year = n;
}

void Student::setAverage(const double n){


this->avg = n;
}

bool Student::operator>(const Student& s){


if(this->avg > s.avg) return true;
else return false;
}

bool Student::operator>=(const Student& s){


if(this->avg >= s.avg) return true;
else return false;
}

bool Student::operator<(const Student& s){


if(this->avg < s.avg) return true;
else return false;
}

bool Student::operator<=(const Student& s){


if(this->avg <= s.avg) return true;
else return false;
}

void Student::print() const{


cout<<"Numele si prenumele: "<< name << endl;
cout<<"Specialitatea: "<< branch << endl;
cout<<"Anul: "<< year << endl;
cout<<"Media: "<< avg << endl << endl;
}

void Student_diplomant::print() const{


cout<<"Numele si prenumele: "<< name << endl;
cout<<"Specialitatea: "<< branch << endl;
cout<<"Anul: "<< year << endl;
cout<<"Media: "<< avg << endl;
cout<<"Denumirea tezei : "<< diplom << endl << endl;
}

int main(){
int x;
cout << "Introduceti numarul de studenti: ";
cin >> x;
Student *room[x];

for(int i = 0; i < x; i++) {


cin.ignore();
char* nume = new char[30];
char* branch = new char[30];
int year;
double avg;
char* diplom = new char[30];

cout << "Introduceti numele si prenumele: ";


cin.getline(nume, 30);
cout << "Introduceti specialitatea: ";
cin.getline(branch, 30);
cout << "Introduceti anul: ";
cin >> year;
cout << "Introduceti media: ";
cin >> avg;

if(year == 4) {
cin.ignore();
cout << "Introduceti denumirea tezei de diploma: ";
cin.getline(diplom, 30);
room[i] = new Student_diplomant(nume, branch, year, avg, diplom);
}
else room[i] = new Student(nume, branch, year, avg);
cout << endl;
}

system("cls");

for(int i = 0; i < x; i++) {


room[i]->print();
}
}
b)
#include <iostream>
#include <string>
#include <stdlib.h>
#include <conio.h>

using namespace std;

class apartament{
public:
int odaie;
int bucatarie;
int etaj;
apartament(){
cout<<"Init";
}
~apartament(){
cout<<"Destroy";
}
};

class camera: public apartament{


public:
char adresa[40];

camera(){
cout<<"Init";
}
~camera(){
cout<<"Destroy";
}
void afisare(){
cout<<"Dati adresa: "<<adresa<<endl;
cout<<"Etaj: "<<etaj<<endl;
cout<<"Odaia m^2: "<<odaie<<endl;
cout<<"Bucatarie m^2:"<<bucatarie<<endl;
};
void citire(){
cout<<"Dati adresa: ";cin>>adresa;
cout<<"Etaj: ";cin>>etaj;
cout<<"Odaia m^2: ";cin>>odaie;
cout<<"Bucatarie m^2:"; cin>>bucatarie;
}
};

int main(){
int k=0,n=0;
float n1,n2;
camera c[10];
system("cls");
cout<<"Introduceti nr de camere:"<<endl;cin>>n;
while(1){
system("cls");
cout<<"Meniu"<<endl;
cout<<"1. Citire camera"<<endl;
cout<<"2. Afisare camera"<<endl;
cout<<"3. Exit"<<endl;

cout<<"Specificati punctul: ";


A: cin>>k;
switch (k){
case 1 :{
for(int i=0;i<n;i++){
cout<<"Introduceti apartamentul nr. "<<i+1<<": "<<endl;
c[i].citire();
}
}break;
case 2 :{ for(int i=0;i<n;i++) c[i].afisare();
getch();
}break;
case 3 :{exit(0);}break;
default:{cout<<"Ati introdus gresit, reintroduceti:"; goto A;}
}

}
}
Concluzia:
În urma efectuării de laborator am studiat avantajele și dezavantajele moștenirii,
am studiat regulile de definire a moștenirii și compoziției.

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