mercoledì 3 settembre 2014

Scenetta al Ristorante del C++: il vecchio maestro ha le sue idee fisse!

Il vecchio maestro, pur non lavorando più, e quindi non essendo istanziabile (informaticamente parlando), e pur lasciando piena libertà ai suoi apprendisti sul metodo da seguire per cucinare i vari piatti, ha però un'idea assolutamente imprescindibile sul modo di cucinare il pollo: esso deve essere tassativamente cucinato col rosmarino, altrimenti gli apprendisti se ne possono anche andare!
#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