2024/9/26

软件设计 石家庄铁道大学信息学院

实验6:原型模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解原型模式的动机,掌握该模式的结构;
2、能够利用原型模式解决实际问题。

[实验任务一]:向量的原型
用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
实验要求:
1. 画出对应的类图;

2.提交源代码(用C++完成);
#include <iostream>
#include <cstring>

class Vector {
private:
double* data; // 动态数组存储向量元素
int length; // 向量的长度

public:
// 构造函数
Vector(int len) : length(len), data(new double[len]) {
std::cout << "Vector created with length " << len << std::endl;
for (int i = 0; i < length; ++i) {
data[i] = 0.0;
}
}

// 析构函数
~Vector() {
delete[] data;
std::cout << "Vector destroyed" << std::endl;
}

// 浅克隆
Vector* shallowClone() const {
Vector* newVec = new Vector(length);
std::memcpy(newVec->data, data, length * sizeof(double));
return newVec;
}

// 深克隆
Vector* deepClone() const {
Vector* newVec = new Vector(*this); // 使用拷贝构造函数实现深克隆
return newVec;
}

// 打印向量
void print() const {
std::cout << "Vector: ";
for (int i = 0; i < length; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}

// 拷贝构造函数(用于深克隆)
Vector(const Vector& other) : length(other.length), data(new double[other.length]) {
std::memcpy(data, other.data, length * sizeof(double));
}
};
int main() {
Vector v1(5); // 创建一个长度为5的向量
v1.print(); // 打印原始向量

// 浅克隆
Vector* v2 = v1.shallowClone();
v2->print(); // 打印浅克隆向量

// 深克隆
Vector* v3 = v1.deepClone();
v3->print(); // 打印深克隆向量

return 0;
}
3.注意编程规范。

posted @ 2024-09-26 23:07  Hbro  阅读(8)  评论(0)    收藏  举报