65,209
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
using namespace std;
class Animal
{
public:
void run()
{
cout << "runing." << endl;
}
virtual ~Animal()
{
}
};
class Dog:public Animal
{
public:
void Bark()
{
cout << "bark." << endl;
}
};
class Cow:public Animal
{
public:
void Eat()
{
cout << "eat." << endl;
}
};
class God
{
public:
static God* CreatGod();
Animal* CreateAnimal(string animalName)
{
if (animalName == "Dog")
{
pAnimal = new Dog();
}
else if (animalName == "Cow")
{
pAnimal = new Cow();
}
else
{
pAnimal = new Animal();
}
return pAnimal;
}
void KillAnimal(Animal* someone)
{
delete someone;
}
void KillGod()
{
if(instance)
{
delete instance;
instance = NULL;
}
}
private:
God();
~God();
static God* instance;
Animal* pAnimal;
God()
: pAnimal(NULL)
{
}
};
God* God::instance = NULL;
God* God::CreatInstance()
{
if (instance == NULL)
{
instance = new God();
}
return instance;
}
int main()
{
God * pGod = God::CreatGod(); // There is only one god
Animal* pAnimal = NULL;
pAnimal = pGod->CreateAnimal("Dog"); // God Creat Dog.
pAnimal->run();
pAnimal->Bake();
pGod->KillAnimal(pAnimal);
pAnimal = pGod->CreateAnimal("Cow"); // God Creat Cow.
pAnimal->run();
pAnimal->Eat();
pGod->KillAnimal(pAnimal);
God::KillGod()
int pause = 0;
cin >> pause;
return 0;
}


~God()
{
delete instance;
delete pAnimal;
}
God类是单例模式,而设计时是通过new创建的对象,释放内存时须显式调用 delete God::CreatInstance();