class CFruit { public: virtualvoid What() =0; }; class CApple : public CFruit { public: virtualvoid What() { printf("Apple\n"); } }; class CPear : public CFruit { public: virtualvoid What() { printf("Pear\n"); } }; class CBanana : public CFruit { public: virtualvoid What() { printf("Banana\n"); } };
enum eFruitType{APPLE=1, PEAR, BANANA};
class CFruitFactory { public: CFruit *GetFruitInstance(eFruitType type) { printf("FruitFactory\n"); switch(type) { case APPLE: returnnew CApple(); case PEAR: returnnew CPear(); case BANANA: returnnew CBanana(); default: return NULL; } } }; int main() { CFruitFactory factory; CFruit *fruit;
printf("What kind of fruit are you want to eat?\n"); printf("1-Apple, 2 -Pear, 3 -Banana\n"); int nType =0; scanf("%d", &nType); fruit = factory.GetFruitInstance(eFruitType(nType)); if(fruit == NULL) { printf("The factor didn't has this fruit "); return0; } fruit->What(); return0; }