Un produs e caracterizat prin nume, pret unitar (numar intreg), unitate de masura (sir de caractere). Scrieti clasa Produs si supraincarcati operatorul de scriere, afisandu-l pe ecran conform exemplului. Scrieti o clasa Magazin, care pe langa nume, contine o lista de produse. Cititi datele unui magazin (nume magazin, numar produse, lista produse), si afisati un inventar al magazinului. Sample Input:
Apa plata
2
sticla
MegaImage
2
Coca-Cola
Sticla 2L
6
Rosii
kg
9
Sample Output:
Apa plata, 2 RON/sticla
MegaImage:
* Coca-Cola, 6 RON/Sticla 2L
* Rosii, 9 RON/kg.
Răspunsuri la întrebare
#include <iostream>
#include <string>
#include <list>
class Produs {
private:
std::string nume;
float pret_unitar;
std::string unitate;
public:
Produs(const std::string& _nume, float _pret_unitar, const std::string& _unitate) :
nume(_nume), pret_unitar(_pret_unitar), unitate(_unitate) {}
friend std::ostream& operator<<(std::ostream& out, const Produs& prod);
};
std::ostream& operator<<(std::ostream& out, const Produs& prod) {
out << prod.nume << ", " << prod.pret_unitar << " RON/" << prod.unitate;
return out;
}
class Magazin {
private:
std::string nume_magazin;
unsigned numar_produse;
std::list<Produs> lista_produse;
public:
Magazin(const std::string& _nume_magazin, unsigned _numar_produse) :
nume_magazin(_nume_magazin), numar_produse(_numar_produse) {}
void citeste_produse() {
for (unsigned i = 0; i < numar_produse; i++) {
std::string nume;
float pret_unitar;
std::string unitate;
std::getline(std::cin, nume);
std::getline(std::cin, unitate);
std::cin >> pret_unitar;
std::cin.get();
lista_produse.emplace_back(nume, pret_unitar, unitate);
}
}
void afiseaza_inventar() {
std::cout << nume_magazin << " :\n";
for (auto& produs : lista_produse)
std::cout << " * " << produs << std::endl;
}
};
int main() {
Produs* prod;
Magazin* maga;
//Citire produs
{
std::string nume;
float pret_unitar;
std::string unitate;
std::getline(std::cin, nume);
std::cin >> pret_unitar;
std::cin.get();
std::getline(std::cin, unitate);
prod = new Produs(nume, pret_unitar, unitate);
}
//Citire magazin
{
std::string nume_magazin;
unsigned numar_produse;
std::getline(std::cin, nume_magazin);
std::cin >> numar_produse;
std::cin.get();
maga = new Magazin(nume_magazin, numar_produse);
maga->citeste_produse();
}
//Afisare rezultat
std::cout << *prod << std::endl;
maga->afiseaza_inventar();
//Dealocare
delete maga;
delete prod;
}