Anzi posso usare il concetto astratto di VeicoloMotorizzato, di cui fanno parte le classi Trattore, Motoscafo, Aereo, delle quali soltanto la classe Trattore implementa l'interfaccia Trainatore. Ecco un esempio più chiaro che mi aiuta a capire bene a che servono le interfacce: la funzione che mette in opera il trainamento accetta un parametro di tipo puntatore a Trainatore, in modo che le si possa dare in pasto sia una classe derivata dal concetto astratto di Animale, come Cavallo, Bue o Asino, sia una classe derivata dal concetto astratto di VeicoloMotorizzato come Trattore (ma non Cane o Gatto, o, rispettivamente, Motoscato o Aereo, che non implementano l'interfaccia Trainatore)
#include "iostream" using namespace std; class Animale{ public: virtual void muoviti()=0; virtual void verso() =0; }; class Trainatore{ public: virtual void azione()=0; }; class Cavallo:public Animale,public Trainatore{ void muoviti(){ cout << "io galoppo" << endl; getchar(); } void verso(){ cout << "io nitrisco" << endl; getchar(); } void azione(){ cout << "io traino il carro velocemente" << endl; getchar(); } }; class Bue:public Animale,public Trainatore{ void muoviti(){ cout << "io cammino" << endl; getchar(); } void verso(){ cout << "io muggisco" << endl; getchar(); } void azione(){ cout << "io traino il carro lentamente" << endl; getchar(); } }; class Gatto:public Animale{ public: void muoviti(){ cout << "io cammino felpato" << endl; getchar(); } void verso(){ cout << "io miagolo" << endl; getchar(); } }; class VeicoloMotorizzato{ public: virtual void carburante()=0; virtual void mezzo()=0; }; class Motoscafo:public VeicoloMotorizzato{ void carburante(){ cout << "benzina" << endl; getchar(); } void mezzo(){ cout << "mare" << endl; getchar(); } }; class Aereo:public VeicoloMotorizzato{ void carburante(){ cout << "kerosene" << endl; getchar(); } void mezzo(){ cout << "aria" << endl; getchar(); } }; class Trattore:public VeicoloMotorizzato,public Trainatore{ void carburante(){ cout << "gasolio" << endl; getchar(); } void mezzo(){ cout << "campagna" << endl; getchar(); } void azione(){ cout << "traino il carro molto velocemente" << endl; getchar(); } }; void trazione(Trainatore * anim){ anim->azione(); } void main(){ Cavallo Furia; Bue Filippo; Gatto Silvestro; Aereo Jumbo; Motoscafo Barchetta; Trattore Nicolino; trazione(&Furia); trazione(&Filippo); trazione(&Nicolino); }
io traino il carro velocemente io traino il carro lentamente traino il carro molto velocemente
Nessun commento:
Posta un commento