标签:克隆 int 模式 Vector 实验 原型 data 向量 size
实验6:原型模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解原型模式的动机,掌握该模式的结构;
2、能够利用原型模式解决实际问题。
[实验任务一]:向量的原型
用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
实验要求:
1. 画出对应的类图;
2.提交源代码(用C++完成);
3.注意编程规范。
#include <iostream>
class Vector {
private:
int* data; // 指向向量数据的指针
int size; // 向量的长度
public:
// 构造函数
Vector(int size) {
this->size = size;
data = new int[size];
}
// 析构函数
~Vector() {
delete[] data;
}
// 获取向量长度
int getSize() {
return size;
}
// 获取指定位置的元素
int getElement(int index) {
return data[index];
}
// 设置指定位置的元素
void setElement(int index, int value) {
data[index] = value;
}
// 浅克隆
Vector shallowClone() {
Vector clone(size);
clone.data = data;
return clone;
}
// 深克隆
Vector deepClone() {
Vector clone(size);
for (int i = 0; i < size; i++) {
clone.data[i] = data[i];
}
return clone;
}
};
int main() {
// 创建一个长度为5的向量
Vector v(5);
// 设置向量元素的值
for (int i = 0; i < v.getSize(); i++) {
v.setElement(i, i + 1);
}
// 浅克隆
Vector shallowCopy = v.shallowClone();
// 修改原始向量的第一个元素
v.setElement(0, 10);
// 输出浅克隆后的向量
std::cout << "浅克隆: ";
for (int i = 0; i < shallowCopy.getSize(); i++) {
std::cout << shallowCopy.getElement(i) << " ";
}
std::cout << std::endl;
// 深克隆
Vector deepCopy = v.deepClone();
// 修改原始向量的第一个元素
v.setElement(0, 20);
// 输出深克隆后的向量
std::cout << "深克隆: ";
for (int i = 0; i < deepCopy.getSize(); i++) {
std::cout << deepCopy.getElement(i) << " ";
}
std::cout << std::endl;
return 0;
}
标签:克隆,
int,
模式,
Vector,
实验,
原型,
data,
向量,
size
From: https://www.cnblogs.com/lin513/p/17811773.html