#include <iostream>
using namespace std;
class ProtoType
{
public:
ProtoType(){}
virtual ~ProtoType(){}
virtual ProtoType* Clone() = 0;
};
class ConcreteClass1 : public ProtoType
{
public:
int field1;
int field2;
public:
ConcreteClass1()
: field1(0)
, field2(0)
{
}
ConcreteClass1(const ConcreteClass1& rightvalue)
{
this->field1 = rightvalue.field1;
this->field2 = rightvalue.field2;
}
virtual ConcreteClass1* Clone()
{
return new ConcreteClass1(*this);
}
friend void operator << (std::ostream& oss, const ConcreteClass1& rightvalue)
{
oss << &rightvalue;
}
};
int main()
{
ConcreteClass1 *object1 = new ConcreteClass1();
object1->field1 = 1;
object1->field2 = 2;
cout << "The value of field1 in object1:" << object1->field1
<< ", field2:" << object1->field2 << endl;
ConcreteClass1 *object2 = object1->Clone();
cout << "The value of field1 in object2:" << object2->field1
<< ", field2:" << object2->field2 << endl;
cout << "the address of object1:" << object1 << endl;
cout << "the address of object2:" << object2 << endl;
delete object1;
delete object2;
return 0;
}