giovedì 14 agosto 2014

Perfezionamento delle classi astratte usate come interfacce in C++

Ecco: più appropriato che la classe astratta usata come interfaccia possieda una funzione che la classe astratta da cui derivano le classi dei vari animali non possiede. Così dalla classe astratta Animale faccio derivare pure la classe Gatto che non implementa l'interfaccia Trainatore in quanto, come è noto, il gatto non viene impiegato per trainare alcunché!
#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 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);
} 

Nessun commento:

Posta un commento