Quali sono le operazioni comuni di ogni elettrodomestico? Attaccarlo alla spina, accenderlo e spegnerlo. Tralasciando per un attimo la prima delle tre, l'interfaccia può essere di soli due metodi (tre con il distruttore virtuale per obbligo del linguaggio).
codice:
struct Elettrodomestico {
virtual void accendi()=0;
virtual void spegni()=0;
virtual ~Elettrodomestico() {}
};
Da questa interfaccia derivi quello che hai bisogno:
codice:
struct TV : public Elettrodomestico {
void accendi() { puts("Ho acceso la TV"); }
void spegni() { puts("Ho spento la TV"); };
~TV () {}
};
struct Phon : public Elettrodomestico {
void accendi() { puts("Ho acceso il phon"); }
void spegni() { puts("Ho spento il phon"); };
~Phon () {}
};
...
TV tv;
Phon phon;
Elettrodomestico* apparecchio = &tv;
apparecchio->accendi();
apparecchio->spegni();
Elettrodomestico* apparecchio = &phon;
apparecchio->accendi();
apparecchio->spegni();
Ora resta da attarli alla spina.
codice:
Elettrodomestico* spina_elettrica[2];
spina_elettrica[0] = &tv;
spina_elettrica[1] = &phon;
spina_elettrica[0]->accendi();
spina_elettrica[0]->spegni();
spina_elettrica[1]->accendi();
spina_elettrica[1]->spegni();
Servono altri apparecchi? Ripeti la derivazione e lo attacchi a una nuova spina.
Questo a enormi linee.