Siano date le seguenti intestazioni:
class ComponenteCucina
{
private:
string marca;
int qualita;
TipoComponente tipo;
double costo;
public:
ComponenteCucina( string=””,
string=””, tipo=nessuno,
costo=0;
bool operator==(const
ComponenteCucina &);
string getMarca() const;
void setMarca(string);
... //tutti i getters and setters
}
class Cucina
{
private:
list<ComponenteCucina> comp;
double sconto_percentuale;
public:
bool verificaCompatibilita();
bool aggiungiComponente(
ComponenteCucina);
double prezzo();
double qualita();
string getNomeAcquirente();
...
}
enum TipoComponente {nessuno = 0, forno, lavello, cappa, frigo}
Supponendo che tutti i metodi sopra elencati tranne quelli indicatio in grassetto siano implementati:
1. Implementare, il metodo double prezzo() della classe Cucina. In particolare, il prezzo di una cucina si ottiene sommando il prezzo di tutti i suoi componenti (prezzo di listino) e applicando lo sconto
double Cucina::prezzo()
{
double prezzo=0;
list<ComponenteCucina>::iterator it;
for(it=comp.begin(); it!=comp.end(); it++)
prezzo+=(*it).getCosto();
return (prezzo*getScontoPercentuale())/100)
}
2.Implementare, il metodo double qualita() della classe Cucina. In particolare, la qualità di una cucina è data dalla media della qualità dei suoi componenti.
double Cucina::qualita()
{
double totQualita=0;
list<ComponenteCucina>::iterator it;
for(it=comp.begin(); it!=comp.end(); it++)
totQualita+=(*it).getQualita();
return totQualita/comp.size();
}
3. Utilizzare l’ereditarietà per realizzare l’interfaccia della classe ElencoCucineOrdinatePerRapportoQualitaPrezzo che implementa una lista ordinata di cucine in cui gli elementi a miglior rapporto qualità prezzo sono inseriti in ordine decrescente dalla testa verso la coda della lista.
class ElencoCucineOrdinatePerRapportoQualitaPrezzo : public vector<Cucina>
{
public:
ElencoCucineOrdinatePerRapportoQualitaPrezzo()
{
ordina(elenco);
}
ordina(vector<Cucina>&)
{
Cucina temp;
for(int i=0; i<elenco.size()-1; i++)
for(int j=0; j<elenco.size()-1; j++)
if(rapporto(elenco[i])<rapporto(elenco[j])
{
temp=elenco[i];
elenco[i]=elenco[j];
elenco[j]=temp;
}
}
double rapporto(Cucina&)
{
return getQualita()/getCosto()
}
private:
vector<Cucina> elenco;
}
4.Implementare, almeno un metodo tra push_back(Cucina) e push_front(Cucina) della lista.
Sareste così gentili da dirmi se questo esercizio l ho fatto bene? E' uno dei miei primi esercizi sulle classi, quindi non me ne vogliate se ci sono errori.. non sono riuscito a fare il punto 4.. qualcuno sarebbe così gentile da spiegarmi come fare? grazie in anticipo.. Saluti..