软件构造实验6

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

 

实验6:原型模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解原型模式的动机,掌握该模式的结构;

2、能够利用原型模式解决实际问题。

 
   

 


[实验任务一]:向量的原型

用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。

实验要求:

1.画出对应的类图;

2.提交源代码(用C++完成);

3.注意编程规范。

 

  1. 类图:

 

  1. 运行结果:

 

 

  1. 源代码:

#include <iostream>

#include <cstring>

 

class Vector {

private:

    int size;

    int* data;

 

public:

    // 构造函数

    Vector(int s) : size(s) {

        data = new int[size];

        for (int i = 0; i < size; i++) {

            data[i] = 0;

        }

    }

 

    // 析构函数

    ~Vector() {

        //delete[] data;

    }

 

    // 复制构造函数(浅克隆)

    Vector(const Vector& other) : size(other.size), data(other.data) {}

 

    // 深克隆构造函数

    Vector deepClone(const Vector& other) {

        size = other.size;

        data = new int[size];

        memcpy(data, other.data, size * sizeof(int));

    }

 

    // 获取向量大小

    int getSize() const {

        return size;

    }

 

    // 获取向量元素

    int getElement(int index) const {

        if (index >= 0 && index < size) {

            return data[index];

        }

        return -1; // 错误值

    }

 

    // 设置向量元素

    void setElement(int index, int value) {

        if (index >= 0 && index < size) {

            data[index] = value;

        }

    }

 

    // 打印向量元素

    void print() {

        for (int i = 0; i < size; i++) {

            std::cout << data[i] << " ";

        }

        std::cout << std::endl;

    }

};

 

int main() {

    Vector vector1(5);

    vector1.setElement(0, 1);

    vector1.setElement(1, 2);

    vector1.setElement(2, 3);

    vector1.setElement(3, 4);

    vector1.setElement(4, 5);

 

    Vector vector2 = vector1; // 浅克隆

 

    Vector vector3(0);

    vector3.deepClone(vector1); // 深克隆

 

    // 修改 vector1 的元素

    vector1.setElement(0, 10);

 

    std::cout << "Vector 1: ";

    vector1.print();

 

    std::cout << "Vector 2 (Shallow Clone): ";

    vector2.print();

 

    std::cout << "Vector 3 (Deep Clone): ";

    vector3.print();

 

    return 0;

}

posted @ 2023-11-02 08:39  风·华正茂  阅读(15)  评论(0编辑  收藏  举报