#include <iostream>
#include <string>
using namespace std;
// 猴子
class Monkey {
public:
Monkey() {}
virtual ~Monkey() {}
virtual Monkey* Clone() = 0; // 克隆
virtual void Play() = 0; // 玩耍
};
// 孙悟空
class SunWuKong : public Monkey {
public:
SunWuKong(string name) { m_strName = name; }
~SunWuKong() {}
// 拷贝构造函数
SunWuKong(const SunWuKong& other) { m_strName = other.m_strName; }
Monkey* Clone() {
// 调用拷贝构造函数
return new SunWuKong(*this);
}
void Play() { cout << m_strName << ":金箍棒" << endl; }
private:
string m_strName;
};
int main() {
// 孙悟空
Monkey* monkey = new SunWuKong("齐天大圣孙悟空");
// 克隆猴子猴孙
Monkey* m1 = monkey->Clone();
Monkey* m2 = m1->Clone();
m1->Play();
m2->Play();
delete monkey;
delete m1;
delete m2;
return 0;
}