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

 

实验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; // 表示无效索引
    }
}

 

3.注意编程规范。