#include "iostream" using namespace std; class Animale{ public: virtual void muoviti()=0; virtual void verso() =0; virtual void azione() =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 Motore:public Trainatore{ public: void rifornimento(){ cout << "voglio benzina" << endl; getchar(); } void azione(){ cout << "io traino il carro molto velocemente" << endl; getchar(); } }; void trazione(Trainatore * anim){ anim->azione(); } void main(){ Cavallo Furia; Bue Filippo; Motore mioMotore; trazione(&Furia); trazione(&Filippo); trazione(&mioMotore); }
io traino il carro velocemente io traino il carro lentamente io traino il carro molto velocementeSì.
Implementano l'interfaccia in quanto istanziano la funzione virtuale pura "azione()". Quindi la funzione che ne mostra i diversi modi di espletare la funzione "azione()" può assumere come parametro un puntatore del tipo della classe astratta Trainatore, che vale pure per un oggetto di una classe completamente diversa da Animale, come Motore.
Nessun commento:
Posta un commento