// Это яблоко? 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 дол-