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

2.提交源代码(用C++完成);
#include <iostream>
class Vector {
private:
int* elements;
int size;
public:
Vector();
Vector(const Vector& other); // 浅克隆构造函数
Vector(const Vector& other, bool deepCopy); // 深克隆构造函数
~Vector();
void push_back(int value);
int getSize() const;
int getElementAt(int index) const;
};
// 默认构造函数
Vector::Vector() : elements(nullptr), size(0) {}
// 浅克隆构造函数
Vector::Vector(const Vector& other) : elements(other.elements), size(other.size) {}
// 深克隆构造函数
Vector::Vector(const Vector& other, bool deepCopy) : size(other.size) {
if (deepCopy) {
elements = new int[size];
for (int i = 0; i < size; ++i) {
elements[i] = other.elements[i];
}
} else {
elements = other.elements;
}
}
// 析构函数
Vector::~Vector() {
delete[] elements;
}
void Vector::push_back(int value) {
int* newElements = new int[size + 1];
for (int i = 0; i < size; ++i) {
newElements[i] = elements[i];
}
newElements[size] = value;
delete[] elements;
elements = newElements;
size++;
}
int Vector::getSize() const {
return size;
}
int Vector::getElementAt(int index) const {
if (index >= 0 && index < size) {
return elements[index];
} else {
return -1; // 表示无效索引
}
}
浙公网安备 33010602011771号