首页 > 其他分享 >软件设计:实验6:原型模式

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

时间:2024-11-27 17:13:51浏览次数:4  
标签:std 克隆 软件设计 v1 Vector 实验 原型 data size

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

}

标签:std,克隆,软件设计,v1,Vector,实验,原型,data,size
From: https://www.cnblogs.com/xuan-2004/p/18572667

相关文章

  • 软件设计:实验5:建造者模式
    实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起......
  • 软件设计:实验9:桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 软件设计:实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1.画出对应的类图;2.提交源......
  • 软件设计:实验10:组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1.文件的执行不需真正实现,只需简单提......
  • 重拾JS-面向对象/原型以及原型链
    简言最近在做前端知识的复习和整理,有了一些自己新的体会。更多在于记录,通过反复的温习,写笔记消除自己以前学习知识点的误区什么是面向对象?要理解什么是面向对象,那么首先要知道什么是面向过程面向过程比如以做饭为例graphTD买菜-->切菜-->炒菜-->装盘在上述流程图中......
  • Educator头歌MySQL数据库实验五:授权及回收权限
    在开始讲解以及分享答案之前如果粘贴答案失效,请点击头歌系统右上角的电源键,释放资源重载数据库,再次进入才能正确通过第1关:授予某数据库的所有权限100任务要求参考答案记录评论任务描述相关知识MySql系统库中的权限表访问控制的两个阶段:授予的权限等级:MySQL权限类型grant......
  • GaussDB 数据库实验环境搭建指导
    @目录简介内容描述实验环境说明1GaussDB数据库购买1.1实验介绍1.1.1关于本实验1.1.2实验目的1.2购买GaussDB数据库1.2.1登录华为云1.2.2购买华为云GaussDB数据库简介本指导书适用于在华为云部署购买GaussDB数据库,通过该指导书可以顺利完成GaussDB数据库在华为云的购买。......
  • 软件设计-Tutorial25
    类图:```mermaidclassDiagramclassItem{<<interface>>+accept(Visitorvisitor)}classBook{-Stringtitle+getTitle()+accept(Visitorvisitor)}classElectronic{-String......
  • 上机实验四:SMO 算法实现与测试
    fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_scoreimportnumpyasnp#(1)加载iris数据......
  • 实验 25:访问者模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解访问者模式的动机,掌握该模式的结构;2、能够利用访问者模式法解决实际问题。 [实验任务一]:打包员在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。实验要求:1. 画出对应的......