实验6:原型模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解原型模式的动机,掌握该模式的结构;
2、能够利用原型模式解决实际问题。
[实验任务一]:向量的原型
用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
实验要求:
1.画出对应的类图;
2.提交源代码(用C++完成);
3.注意编程规范。
1.
2.#include <iostream>
#include <cstring>
class Vector {
private:
double* data;
int size;
public:
// 构造函数
Vector(int size) : size(size) {
data = new double[size];
}
// 浅克隆构造函数
Vector(const Vector& other) : size(other.size) {
data = other.data; // 浅克隆,共享相同的内存
}
// 深克隆函数
Vector* deepClone() {
Vector* clonedVector = new Vector(size);
std::memcpy(clonedVector->data, data, size * sizeof(double));
return clonedVector;
}
// 析构函数
~Vector() {
delete[] data;
}
// 改变向量大小
void resize(int newSize) {
delete[] data;
data = new double[newSize];
size = newSize;
}
// 显示向量内容
void display() {
for (int i = 0; i < size; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
// 创建向量
Vector v1(5);
for (int i = 0; i < v1.size; ++i) {
v1.data[i] = i;
}
std::cout << "Original Vector: ";
v1.display();
// 浅克隆
Vector v2(v1);
std::cout << "Shallow Cloned Vector: ";
v2.display();
// 深克隆
Vector* v3 = v1.deepClone();
std::cout << "Deep Cloned Vector: ";
v3->display();
// 改变原始向量大小
v1.resize(3);
std::cout << "Resized Original Vector: ";
v1.display();
// 检查浅克隆向量是否受影响
std::cout << "Shallow Cloned Vector after resize: ";
v2.display();
delete v3; // 释放深克隆向量的内存
return 0;
}