实验6:原型模式

实验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;

}

 

posted @ 2023-11-06 08:54  会秃头的小白  阅读(16)  评论(0编辑  收藏  举报