// Это яблоко? Apple* pApple =

dynamic cast<Apple*>(pingredient);

if (pApple) {

pApple->Chop() ;

return;

}

// Это пучок салата-латук? Lettuce* pLettuce =

dynamic_cast<Lettuce*>(pingredient), if (pLettuce) {

pLettuce->Shred() ;

return;

}

// Это кусок сыра? Cheese* pCheese =

dynamic_cast<Cheese*>(pingredient) ;

if (pCheese)

pCheese->Grate() ;

return;

}

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

void main()

{

Lettuce MyLettuce;

App1e MyApp1e ;

Cheese MyCheese;

// Обработка овощей

Processlngredient(&MyLettuce) ;

Processlngredient(SMyApple);

Processlngredient(SMyCheese);

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

cout « MyLettuce « "\n";

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

cout « MyApple « "\n";

cout « "Сыр: ";

cout « MyCheese « "\n";

В программе определен класс верхнего уровня Food, который знает только то, что продукты существуют всегда в определенном состоянии. Класс Food позволяет устанавливать, запрашивать и выводить состояние продукта, но само по себе это не представляет большого интереса. В действительности в иерархии классов достаточно высокой сложности и размера класс Food дол-