Tutorial 6_原型模式
实验6:原型模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解原型模式的动机,掌握该模式的结构;
2、能够利用原型模式解决实际问题。
[实验任务一]:向量的原型
用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
实验要求:
1. 画出对应的类图;

Tutorial 6_原型模式实验6:原型模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解原型模式的动机,掌握该模式的结构; 2、能够利用原型模式解决实际问题。
[实验任务一]:向量的原型 用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。实验要求: 1. 画出对应的类图;
2. 提交源代码(用C++完成);#include <iostream>#include <cstring>class Vector {private:int size;double* data;public:// 构造函数,初始化向量Vector(int size) : size(size) {data = new double[size];for (int i = 0; i < size; i++) {data[i] = 0.0;}}// 析构函数,释放内存~Vector() {delete[] data;}// 获取向量的大小int getSize() const {return size;}// 获取向量元素的值double get(int index) const {if (index >= 0 && index < size) {return data[index];}return 0.0; // 返回默认值}// 设置向量元素的值void set(int index, double value) {if (index >= 0 && index < size) {data[index] = value;}}// 浅克隆,返回一个新的Vector对象,共享相同的数据Vector shallowClone() {Vector clone(size);clone.data = data; // 共享相同的数据return clone;}// 深克隆,返回一个新的Vector对象,拷贝原有数据Vector deepClone() {Vector clone(size);for (int i = 0; i < size; i++) {clone.data[i] = data[i];}return clone;}};int main() {Vector v1(3);v1.set(0, 1.0);v1.set(1, 2.0);v1.set(2, 3.0);// 浅克隆Vector v2 = v1.shallowClone();v2.set(0, 10.0);// 深克隆Vector v3 = v1.deepClone();v3.set(0, 20.0);// 输出原始向量std::cout << "始向量:" << std::endl;for (int i = 0; i < v1.getSize(); i++) {std::cout << v1.get(i) << " ";}std::cout << std::endl;// 输出浅克隆后的向量std::cout << "浅克隆后的向量:" << std::endl;for (int i = 0; i < v2.getSize(); i++) {std::cout << v2.get(i) << " ";}std::cout << std::endl;// 输出深克隆后的向量std::cout << "克隆后的向量:" << std::endl;for (int i = 0; i < v3.getSize(); i++) {std::cout << v3.get(i) << " ";}std::cout << std::endl;return 0;}3.注意编程规范。
|