Глава 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";