.SHREDDED, GRATED, SLICED, CHOPPED } FoodState;

// Вершина дерева наследования

class Food (

public:

// Конструктор

Food,(const FoodState = WHOLE);

// Виртуальные методы — все продукты должны иметь возможность // устанавливать и возвращать свое состояние. // Эти функции обеспечивают также полиморфность // класса Food и возможность использования RTTI. virtual FoodState GetStatef) const;

virtual void SetState(const FoodState);

« private:

// Закрытые данные-члены FoodState theFoodState;

// Конструктор Food

Food::Food(const FoodState newState)

{

SetState(newState) ;

}

// Виртуальные методы

FoodState Food::GetState() const

{

return theFoodState;

void Food::SetState(const FoodState newState) {

theFoodState = newState;

}

// Перегрузка «, теперь можно вывести текущее состояние 3Stream& operator«(ostream& outstrm,

Foods theFood) (

switch(theFood.GetState()) (

case WHOLE: outstrm « "Целиком";

break;

case SHREDDED: outstrm « "Порезать";

break;

case GRATED: outstrm « "Натереть";

break;