64,639
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
using namespace std;
class Prototype
{
public:
#ifdef VD
virtual ~Prototype() {}
#endif
virtual Prototype *Clone() = 0;
virtual void display() = 0;
};
struct Resource
{
Resource()
{
std::cout << "creating resource " << this << std::endl;
}
Resource(Resource const& )
{
std::cout << "creating resource " << this << std::endl;
}
~Resource()
{
std::cout << "destroying resource " << this << std::endl;
}
};
class Prototype2:public Prototype
{
protected:
string name;
Resource* pr;
public:
~Prototype2()
{
delete pr;
}
Prototype2(string name)
{
this->name = name;
pr = new Resource();
}
Prototype2(const Prototype2&type)
{
this->name = type.name;
pr = new Resource(*type.pr);
}
virtual void display()
{
cout<<"my name is : "<< this->name <<endl;
}
Prototype *Clone()
{
return new Prototype2(*this);
}
};
int main()
{
Prototype *obj4 = new Prototype2("fulima");
Prototype *obj6 = obj4->Clone();
obj4->display();
obj6->display();
delete obj4;
delete obj6;
return 0;
}
c:\demo>cl /nologo /EHsc /W4 /DVD demo.cpp
demo.cpp
c:\demo>demo
creating resource 001F7F68
creating resource 001F7FC0
my name is : fulima
my name is : fulima
destroying resource 001F7F68
destroying resource 001F7FC0
c:\demo>cl /nologo /EHsc /W4 demo.cpp
demo.cpp
c:\demo>demo
creating resource 002A7F68
creating resource 002A7FC0
my name is : fulima
my name is : fulima
c:\demo>