class HomeCinema
{
private:
list<Componente> componenti;
public:
HomeCinema(); // costruttore default
HomeCinema(const HomeCinema & hc);// costruttore
friend ostream& operator<<(const ostream& hc, const HomeCinema& a); //operatore <<
bool operator!=(const HomeCinema& a); // operator !=
double costo()
{
double sum=0;
for(list<Componente>::iterator i= componente.begin(); i != componenti.end();i++)
{
sum+=(*i).costo();
} // chiusura for
return sum;
} // chiusura costo
bool aggiungiComponente(Componente c)
{
for(list<Componente>::iterator i= componente.begin(); i != componenti.end();i++)
{
if(!(*i).compatibileCon(c))
{
return false;
} // chiusura if
} // chiusura for
componenti.push_back(c);
return true;
} // chiusura aggiungiComponenti
}; // chiusura classe
a) completare l implementazione dei metodi specificati
b) progettare le/la classe componente in modo da consentire la configurazione di un impianto con i piu comuni componenti(TV, amplificatore,diffusori frontali,laterali subwoofer ecc.)
ho implementato i due operatori di ridefinizione:
friend ostream& operator<<(ostream& out,HomeCinema& h)
{
for(list<Componente>::iterator it=h.componenti.begin();it!=h.componenti.end();it++)
{
out<<(*it).getTV()<< " "<<(*it).getAmplificatore()<< " "<<(*it).getSubWoofer<<endl;
}
return out;
}
bool operator!=(const HomeCinema& a)
{
if(componenti.size()!=a.componenti.size())
return false;
list<Componente>::iterator jt=componenti.begin();
for(list<Componente>::iterator it=a.componenti.begin();it!=a.componenti.end();it++)
{
if((*b).getNomeComponente()==(*it).getNomeComponente() || (*b).getPrezzo() == (*it).getPrezzo)
{
return false;
} //chiusura if
b++;
}//chiusura for
return true;
}//chiusura funzione