init commit
This commit is contained in:
53
archive/design pattern/prototype.cpp
Normal file
53
archive/design pattern/prototype.cpp
Normal file
@ -0,0 +1,53 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class Object
|
||||
{
|
||||
public:
|
||||
virtual Object *colne() { return NULL; };
|
||||
virtual void display() = 0;
|
||||
};
|
||||
|
||||
class Address
|
||||
{
|
||||
public:
|
||||
string address;
|
||||
Address(string addr)
|
||||
{
|
||||
this->address = addr;
|
||||
}
|
||||
};
|
||||
|
||||
class Customer : public Object
|
||||
{
|
||||
public:
|
||||
Address *address;
|
||||
string user;
|
||||
Object *clone() // 深拷贝
|
||||
{
|
||||
Customer *a = new Customer();
|
||||
a->user = this->user;
|
||||
a->address = new Address(this->address->address);
|
||||
return a;
|
||||
}
|
||||
void display()
|
||||
{
|
||||
cout << this->user << ":" << this->address->address << endl;
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
Customer *a = new Customer();
|
||||
a->user = "test";
|
||||
a->address = new Address("haha");
|
||||
|
||||
Customer *b = (Customer *)a->clone();
|
||||
b->user = "test123";
|
||||
a->display();
|
||||
b->display();
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user