9.27

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

 

实验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.注意编程规范。

posted @ 2025-01-02 15:26  jais  阅读(16)  评论(0)    收藏  举报