Sunteți pe pagina 1din 8

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT
Lucrare de laborator nr.4
la
Programarea orientată pe obiecte

A efectuat: st. gr.TI - 195


Sirbu Daniel

A controlat: lector univer.


Mititelu Vitalie

Chișinău 2020

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
Lucrare de laborator nr.4

Tema: Moştenirea şi compoziţia

Varianta 4

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

Listingul programului (a)

#include <iostream>
#include <cstring>

class Om {
int salariu;
public:
explicit Om(int salariu);

virtual ~Om();

int ceSalariu() const;

friend std::ostream &operator<<(std::ostream &os, const Om &om);


};

Om::Om(int salariu) : salariu(salariu) {


std::cout << "Obiectul Om s-a creat!\n";
}

Om::~Om() {

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
std::cout << "Obiectul Om s-a distrus!\n";
}

int Om::ceSalariu() const {


return salariu;
}

std::ostream &operator<<(std::ostream &os, const Om &om) {


os << "salariu: " << om.salariu << std::endl;
return os;
}

class Colaborator : public Om {


char *post;
public:
explicit Colaborator(char *post, int salariu);

~Colaborator() override;

char *cePost() const;

friend std::ostream &operator<<(std::ostream &os, const Colaborator


&platypus);
};

Colaborator::Colaborator(char *post, int salariu) : Om(salariu) {


std::cout << "Obiectul Colaborator a fost creat!\n";
Colaborator::post = new char[strlen(post) + 1];
strcpy(Colaborator::post, post);
}

char *Colaborator::cePost() const {


return post;
}

Colaborator::~Colaborator() {
std::cout << "Obiectul Colaborator a fost distrus!\n";
delete[] post;
}

std::ostream &operator<<(std::ostream &os, const Colaborator &colaborator) {


os << std::boolalpha << static_cast<const Om &>(colaborator) <<
colaborator.post << std::endl;
return os;
}

int main() {
using std::cout;
Colaborator c("Profesor", 6000);
cout << "\nColaborator:\n" << c;
cout << "\nOm:\n" << (Om) c;
return 0;
}

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
Rezultatul programului (a)

3.Listingul programului (b)


#include <iostream>
#include <cstring>
#include <vector>

class CarteDeJoc {
char *grad;
char *culoare;
bool intoarsa = false;
public:
CarteDeJoc(char *grad, char *culoare);

virtual ~CarteDeJoc();

void flip();

CarteDeJoc();

friend std::ostream &operator<<(std::ostream &os, const CarteDeJoc &joc);

void setGrad(char *grad);

void setCuloare(char *culoare);


};

CarteDeJoc::CarteDeJoc(char *grad, char *culoare) {


CarteDeJoc::grad = new char[strlen(grad) + 1];
CarteDeJoc::culoare = new char[strlen(grad) + 1];

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
strcpy(CarteDeJoc::grad, grad);
strcpy(CarteDeJoc::culoare, culoare);
}

CarteDeJoc::~CarteDeJoc() {}

void CarteDeJoc::flip() {
CarteDeJoc::intoarsa = !intoarsa;
}

std::ostream &operator<<(std::ostream &os, const CarteDeJoc &joc) {


if (joc.intoarsa)
os << "Intoarceti cartea mai intai" << std::endl;
else
os << joc.grad << " " << joc.culoare << std::endl;
return os;
}

void CarteDeJoc::setGrad(char *grad) {


CarteDeJoc::grad = new char[strlen(grad) + 1];
strcpy(CarteDeJoc::grad, grad);
}

void CarteDeJoc::setCuloare(char *culoare) {


CarteDeJoc::culoare = new char[strlen(culoare) + 1];
strcpy(CarteDeJoc::culoare, culoare);
}

CarteDeJoc::CarteDeJoc() = default;

class ButucDeCarti {
protected:
std::vector<CarteDeJoc> butuc;
public:
ButucDeCarti();

virtual void arataCarti() = 0;


};

ButucDeCarti::ButucDeCarti() {
butuc = std::vector<CarteDeJoc>(36);
char *culori[] = {"Rosu", "Doba", "Verde", "Cruce"};
for (int i = 0; i <= 8; ++i) {
for (int j = 0; j < 4; ++j) {
int index = i * 4 + j;
if (i + 6 < 11) {
butuc[index].setGrad((char *) std::to_string(i + 6).c_str());
} else {
if (i == 5) {
butuc[index].setGrad("J");
} else {
if (i == 6) {
butuc[index].setGrad("Q");
} else {
if (i == 7)
butuc[index].setGrad("K");
else
butuc[index].setGrad("A");
}
}
}

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
butuc[index].setCuloare(culori[j]);
}
}
}

class ButucOrdonat : ButucDeCarti {


bool ordineInversa;
public:
ButucOrdonat(bool ordineInversa = false);

friend class ButucDeCarti;

void arataCarti();

void schimbaOrdinea();
};

ButucOrdonat::ButucOrdonat(bool ordineInversa) : ButucDeCarti(),


ordineInversa(ordineInversa) {}

void ButucOrdonat::arataCarti() {
for (int i = 0; i < 36; ++i) {
std::cout << this->butuc[(ordineInversa) ? 35 - i : i];
}
}

void ButucOrdonat::schimbaOrdinea() {
ordineInversa = !ordineInversa;
}

class ButucAleator : ButucDeCarti {


public:
ButucAleator();

void arataCarti() override;


};

void shuffle(std::vector<CarteDeJoc> &deck) {


int deckSize = deck.size();
while (deckSize > 1) {
srandom(time(NULL));
long int k = rand();
k = k % deckSize;
deckSize--;
CarteDeJoc temp = deck[deckSize];
deck[deckSize] = deck[k];
deck[k] = temp;
}
}

void ButucAleator::arataCarti() {
for (int i = 0; i < 36; ++i) {
std::cout << this->butuc[i];
}
}

ButucAleator::ButucAleator() : ButucDeCarti() {
shuffle(butuc);
}

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
int main() {
using std::cout;
ButucAleator b;
cout << "Butuc aleator:\n";
b.arataCarti();
cout << "\nButuc ordonat:\n";
ButucOrdonat b1;
b1.arataCarti();
cout << "\nButuc ordonat invers:\n";
b1.schimbaOrdinea();
b1.arataCarti();
return 0;
}
2. Rezultatul programului (b)

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
Concluzii:

1. Verificarea ne arata ca rezultatele obtinute sunt corecte si programul lucreaza corect.


2. Au fost obtinute cunoștințe în studierea principiilor de definire şi utilizare a mostenirii si
compozitiei ei.

This study source was downloaded by 100000854172019 from CourseHero.com on 10-31-2022 13:45:20 GMT -05:00

https://www.coursehero.com/file/79057470/Lucrare-de-Laborator-Nr4-POOdocx/
Powered by TCPDF (www.tcpdf.org)

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