Witam, czy mógłby mi ktoś pomóc bo nie wiem jak to zrobić, ale sprawa wydaję się prosta i całkiem możliwe że jest prosta, mam zrobić to, do
metody pokaz_opis() w konkretnych podklasach klasy Produkt uzupełnić o pokazywanie ceny produktu;
Ktoś pomoże? Z góry bardzo dziękuje :3
#include<iostream>
#include<string>
using namespace std;
class Produkt {//klasa abstrakcyjna
double cena;
public:
double daj_cene() { return cena; }
virtual string pokaz_opis() = 0;
Produkt(double cena) :cena(cena) {}
};
class Dysk :public Produkt {
int pojemnosc;
public:
string pokaz_opis() { return "Dysk: pojemnosc " + to_string(pojemnosc);}
Dysk(double cena, int pojemnosc) :Produkt(cena) { this->pojemnosc = pojemnosc; }
};
class Monitor :public Produkt {
double przekatna;
public:
string pokaz_opis() { return "Monitor: przekatna " + to_string(przekatna); }
Monitor(double cena, double przekatna) :Produkt(cena) { this->przekatna = przekatna; }
};
class Myszka :public Produkt {
int DPI;
public:
string pokaz_opis() { return "Myszka: DPI " + to_string(DPI); }
Myszka(double cena, double DPI) :Produkt(cena) { this->DPI = DPI; }
};
class PozycjaZamowienia {
Produkt* p;
int ilosc;
public:
void dodaj_produkt(Produkt* p, int ilosc) {
this->p = p;
this->ilosc = ilosc;
}
double oblicz_wartosc() { return ilosc*p->daj_cene(); }
string pokaz_opis() {
return p->pokaz_opis() + " ilosc: " + to_string(ilosc);
}
};
class Zamowienie {
PozycjaZamowienia pz[10];
int lb_pozycji;
public:
bool dodaj_produkt(Produkt* p, int ilosc) {
lb_pozycji++;
if (lb_pozycji > 10) { cout << "\nNie mozna dodac produktu do zamowienia"; return 0; }
pz[lb_pozycji - 1].dodaj_produkt(p, ilosc);
return 1;
}
double oblicz_wartosc() {
double wartosc = 0;
for (int i = 0; i < lb_pozycji; i++)
wartosc += pz[i].oblicz_wartosc();
return wartosc;
}
void pokaz() {
for (int i = 0; i < lb_pozycji; i++)
cout << "\n" << pz[i].pokaz_opis();
}
Zamowienie() :lb_pozycji(0) {}
};
Produkt** tworz_baze_produktow(int&n) {
n = 6;
Produkt** p = new Produkt*[n];
p[0] = new Monitor(600, 21);
p[1] = new Monitor(330, 14.1);
p[2] = new Dysk(200, 120);
p[3] = new Dysk(360, 320);
p[4] = new Myszka(200, 3100);
p[5] = new Myszka(360, 1200);
return p;
}
void usun_baze_produktow(Produkt**p, int n) {
for (int i = 0; i < n; i++)
delete[] p[i];
delete[]p;
}
void wyswietl_produkty(Produkt**p, int n) {
cout << "\nBaza produktow: ";
for (int i = 0; i < n; i++)
cout << "\n" << i + 1 << ": " << p[i]->pokaz_opis();
}
int main() {
int lb_produktow;
Produkt** baza_produktow = tworz_baze_produktow(lb_produktow);
wyswietl_produkty(baza_produktow, lb_produktow);
Zamowienie* z = new Zamowienie;
cout << "\n\nTworzenie nowego zamowienia: ";
int ktory_produkt;
cout << "\nNumer produktu (1.." << lb_produktow << ") lub k zeby zakonczyc: ";
while (cin >> ktory_produkt) {
cout << "\nWybrano: " << baza_produktow[ktory_produkt - 1]->pokaz_opis();
int ilosc; cout << ". Podaj ilosc: "; cin >> ilosc;
if (!z->dodaj_produkt(baza_produktow[ktory_produkt - 1], ilosc))break;
cout << "\nNumer produktu (1.." << lb_produktow << ") lub k zeby zakonczyc: ";
}
cout << "\n\nPodsumowanie zamowienia: ";
z->pokaz();
cout << "\nWartosc zamowienia: " << z->oblicz_wartosc();
delete z;
usun_baze_produktow(baza_produktow, lb_produktow);
}