#include "iostream"
using namespace std;
class Cuoco{
public:
void Pollo(){
cout << "Cucino il pollo col rosmarino" << endl;
getchar();
}
virtual void Pasta(char * condimento)=0;
};
class Apprendista: public Cuoco{
public:
void Pasta(char * condimento){
cout << "Io cucino la pasta nella pentola a pressione con " << condimento << endl;
getchar();
}
void Pasta(char * condimento, char * condimento2){
cout << "Io cucino la pasta nella pentola a pressione con " << condimento << " e con " << condimento2 << endl;
getchar();
}
};
class Apprendista2: public Cuoco{
public:
void Pasta(char * condimento){
cout << "Io cucino la pasta con " << condimento << endl;
getchar();
}
void Pasta(char * condimento, char * condimento2){
cout << "Io cucino la pasta con " << condimento << " e con " << condimento2 << endl;
getchar();
}
};
void CucinaPasta(Cuoco * n, char * condimento){
n->Pasta(condimento);
}
void CucinaPollo(Cuoco *n){
n->Pollo();
}
void main(){
Apprendista * Antonio = new Apprendista();
Apprendista * Nicola = new Apprendista();
Apprendista2 * Armando = new Apprendista2();
CucinaPasta(Antonio, "sugo");
CucinaPollo(Antonio);
CucinaPasta(Nicola, "fagioli");
CucinaPollo(Nicola);
CucinaPasta(Armando, "ceci");
CucinaPollo(Armando);
}
...e questo viene espresso non tramite un metodo virtuale, ma tramite un metodo già implementato, che dovrà valere per tutti:
Io cucino la pasta nella pentola a pressione con sugo Cucino il pollo col rosmarino Io cucino la pasta nella pentola a pressione con fagioli Cucino il pollo col rosmarino Io cucino la pasta con ceci Cucino il pollo col rosmarino
Ma col tempo, egli diviene più tollerante: i suoi apprendisti possono anche cambiare modo di cucinare il pollo, ma devono dichiararlo espressamente, altrimenti in assenza di prese di posizione precise seguiranno il metodo del maestro. Ed ecco che una categoria di Apprendisti, quelli più innovatori, decidono di cambiare il loro modo di cucinare:
#include "iostream" using namespace std; class Cuoco{ public: virtual void Pollo(){ cout << "Cucino il pollo col rosmarino" << endl; getchar(); } virtual void Pasta(char * condimento)=0; }; class Apprendista: public Cuoco{ public: void Pasta(char * condimento){ cout << "Io cucino la pasta nella pentola a pressione con " << condimento << endl; getchar(); } void Pasta(char * condimento, char * condimento2){ cout << "Io cucino la pasta nella pentola a pressione con " << condimento << " e con " << condimento2 << endl; getchar(); } void Pollo(){ cout << "Io cucino il pollo con l'origano" << endl; getchar(); } }; class Apprendista2: public Cuoco{ public: void Pasta(char * condimento){ cout << "Io cucino la pasta con " << condimento << endl; getchar(); } void Pasta(char * condimento, char * condimento2){ cout << "Io cucino la pasta con " << condimento << " e con " << condimento2 << endl; getchar(); } }; void CucinaPasta(Cuoco * n, char * condimento){ n->Pasta(condimento); } void CucinaPollo(Cuoco *n){ n->Pollo(); } void main(){ Apprendista * Antonio = new Apprendista(); Apprendista * Nicola = new Apprendista(); Apprendista2 * Armando = new Apprendista2(); CucinaPasta(Antonio, "sugo"); CucinaPollo(Antonio); CucinaPasta(Nicola, "fagioli"); CucinaPollo(Nicola); CucinaPasta(Armando, "ceci"); CucinaPollo(Armando); }
Io cucino la pasta nella pentola a pressione con sugo Io cucino il pollo con l'origano Io cucino la pasta nella pentola a pressione con fagioli Io cucino il pollo con l'origano Io cucino la pasta con ceci Cucino il pollo col rosmarino
Nessun commento:
Posta un commento