Глава 23. Динамическая идентификация типов

case SLICED: outstrm « "Дольками";

breaks-case CHOPPED: outstnn « "Кусочками";

break;

default:

outstrm « "Недопустимое состояние!";

} return outstrm;

// Группировка промежуточных классов class Saladlngredient : public Food { public:

/'/ Чисто виртуальная функция,

// которую должен поддерживать

// любой класс ингредиентов салата virtual void Processlngredient() = 0;

};

// Отдельные типы продуктов

class Apple : public Saladlngredient {

public:

void Processlngredient () { Set-State (CHOPPED) ; } };

class Cheese : public Food { public:

void Processlngredient() { SetState(GRATED); ) };

class Lettuce : public Food { public:

void Processlngredient() ( SetState(SHREDDED); ) };

// Займемся приготовлением салата

void main()

{

Lettuce MyLettuce;

App1e MyApp1e;

Cheese MyCheese;

// Обработка овощей MyLettuce.Processlngredient() ;

MyApple.Processlngredient ();

MyCheese.Processlngredient();

// Посмотрим, что получилось cout « "Латук: ";

cout « MyLettuce « "\n";

cout « "Яблоко: ";

cout « MyApple « "\n";