软件设计:实验6:原型模式

实验6:原型模式

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

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

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

 

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

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

实验要求:

1.画出对应的类图;

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

3.注意编程规范。

 

 

1.

2.#include <iostream>

#include <cstring>

 

class Vector {

private:

    double* data;

    int size;

 

public:

    // 构造函数

    Vector(int size) : size(size) {

        data = new double[size];

    }

 

    // 浅克隆构造函数

    Vector(const Vector& other) : size(other.size) {

        data = other.data; // 浅克隆,共享相同的内存

    }

 

    // 深克隆函数

    Vector* deepClone() {

        Vector* clonedVector = new Vector(size);

        std::memcpy(clonedVector->data, data, size * sizeof(double));

        return clonedVector;

    }

 

    // 析构函数

    ~Vector() {

        delete[] data;

    }

 

    // 改变向量大小

    void resize(int newSize) {

        delete[] data;

        data = new double[newSize];

        size = newSize;

    }

 

    // 显示向量内容

    void display() {

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

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

        }

        std::cout << std::endl;

    }

};

 

int main() {

    // 创建向量

    Vector v1(5);

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

        v1.data[i] = i;

    }

    std::cout << "Original Vector: ";

    v1.display();

 

    // 浅克隆

    Vector v2(v1);

    std::cout << "Shallow Cloned Vector: ";

    v2.display();

 

    // 深克隆

    Vector* v3 = v1.deepClone();

    std::cout << "Deep Cloned Vector: ";

    v3->display();

 

    // 改变原始向量大小

    v1.resize(3);

    std::cout << "Resized Original Vector: ";

    v1.display();

 

    // 检查浅克隆向量是否受影响

    std::cout << "Shallow Cloned Vector after resize: ";

    v2.display();

 

    delete v3; // 释放深克隆向量的内存

 

    return 0;

}

posted @ 2024-11-27 17:02  痛苦代码源  阅读(1)  评论(0编辑  收藏  举报