如下: /* dev c++ ccsdu2004@yahoo.com.cn www.gaimo.net ccsdu2004 03.04.2009 */ //原型模式 #include <iostream> #include <string> #include <memory> using namespace std; template<typename OBJ> class ProtoType { public: ProtoType(){ptr.reset(0);} virtual ~ProtoType(){} public: virtual OBJ *Clone() = 0; protected: auto_ptr<OBJ> ptr; }; class YuLi: public ProtoType<YuLi> { public: YuLi(int _power,int _gene):name("尤里"),power(_power), gene(_gene) { id ++; } virtual ~YuLi(){} public: inline YuLi *Clone(){ptr.reset(new YuLi(power,gene));return ptr.get();} inline void Show(){cout<<name<<" 能量: "<<power<<" :基因带 "<<gene<<" 复制编号"<<++id<<endl;} private: string name; int power,gene; static int id; }; int YuLi::id = 0; int main() { YuLi yuli(7800,34); yuli.Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()-> Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Clone()->Show(); system("PAUSE"); return 1; }