//示意图 略
//自我练习不具备参考价值
#include<iostream>
using namespace std;
class Food
{
public:
virtual void message()
{
cout<<"this is food"<<endl;
}
};
class meat : public Food
{
virtual void message()
{
cout<<"This is meat"<<endl;
}
};
class fish : public Food
{
virtual void message()
{
cout<<"This is fish"<<endl;
}
};
class g_meat:public meat
{
void message()
{
cout<<"This is g_meat"<<endl;
}
};
class y_meat:public meat
{
void message()
{
cout<<"This is y_meat"<<endl;
}
};
class g_fish:public fish
{
void message()
{
cout<<"This is g_fish"<<endl;
}
};
class y_fish:public fish
{
void message()
{
cout<<"This is y_fish"<<endl;
}
};
class Cooker{
public:
virtual Food* cook_meat()=0;
virtual Food* cook_fish()=0;
};
class gCooker : public Cooker
{
public:
Food* cook_meat()
{
return new g_meat();
}
Food* cook_fish()
{
return new g_fish();
}
};
class yCooker : public Cooker
{
public:
Food* cook_meat()
{
return new y_meat();
}
Food* cook_fish()
{
return new y_fish();
}
};
int main()
{
gCooker gcooker;
yCooker ycooker;
Food * food1 = gcooker.cook_meat();
food1->message();
Food * food2 = gcooker.cook_fish();
food2->message();
Food * food3 = ycooker.cook_meat();
food3->message();
Food * food4 = ycooker.cook_fish();
food4->message();
delete food1;
delete food2;
delete food3;
delete food4;
return 1;
}