软件设计 石家庄铁道大学信息学院
实验6:原型模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解原型模式的动机,掌握该模式的结构;
2、能够利用原型模式解决实际问题。
[实验任务一]:向量的原型
用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
实验要求:
#include <iostream>
#include <memory>
class Vector {
private:
int* elements;
int size;
public:
// 构造函数
Vector(int size)
: size(size) {
elements =
new int[size];
}
// 浅克隆
Vector(Vector*
vector) {
this->size
= vector->size;
this->elements = vector->elements;
}
// 深克隆
Vector(const
Vector& vector) {
this->size
= vector.size;
this->elements = new int[this->size];
for (int i =
0; i < this->size; ++i) {
this->elements[i] = vector.elements[i];
}
}
// 析构函数
~Vector() {
delete[]
elements;
}
// 浅克隆方法
Vector*
cloneShallow() {
return new
Vector(this);
}
// 深克隆方法
Vector*
cloneDeep() {
return new
Vector(*this);
}
// 显示向量元素
void display() {
for (int i =
0; i < size; ++i) {
std::cout
<< elements[i] << " ";
}
std::cout
<< std::endl;
}
};
int main() {
// 创建向量
Vector v1(5);
for (int i = 0; i
< v1.size; ++i) {
v1.elements[i] = i;
}
v1.display();
// 浅克隆
Vector* v2 =
v1.cloneShallow();
v2->display();
// 深克隆
Vector v3 = v1;
v3.display();
return 0;
}