实验6:原型模式

news/2024/10/30 8:26:42/文章来源:https://www.cnblogs.com/yuanxinglan/p/18514865

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

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

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

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

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

实验要求:

1.画出对应的类图;

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

3.注意编程规范。

1、类图

 

2、

2、源代码

#include <iostream>

#include <cstring>

 

class Vector {

private:

    int* data;

    size_t length;

 

public:

    // 构造函数

    Vector(size_t len) : length(len) {

        data = new int[length];

        for (size_t i = 0; i < length; ++i) {

            data[i] = 0; // 初始化为0

        }

    }

 

    // 析构函数

    ~Vector() {

        delete[] data;

    }

 

    // 深克隆

    Vector* deepClone() const {

        Vector* newVector = new Vector(length);

        for (size_t i = 0; i < length; ++i) {

            newVector->data[i] = data[i]; // 复制数据

        }

        return newVector;

    }

 

    // 浅克隆

    Vector* shallowClone() const {

        return new Vector(*this); // 直接复制对象

    }

 

    // 设置向量值

    void setValue(size_t index, int value) {

        if (index < length) {

            data[index] = value;

        }

    }

 

    // 获取向量值

    int getValue(size_t index) const {

        return (index < length) ? data[index] : 0;

    }

 

    // 打印向量

    void print() const {

        for (size_t i = 0; i < length; ++i) {

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

        }

        std::cout << std::endl;

    }

};

 

int main() {

    Vector vec1(5);

    vec1.setValue(0, 1);

    vec1.setValue(1, 2);

    vec1.setValue(2, 3);

    vec1.setValue(3, 4);

    vec1.setValue(4, 5);

 

    std::cout << "原始向量: ";

    vec1.print();

 

    // 深克隆

    Vector* deepCloneVec = vec1.deepClone();

    deepCloneVec->setValue(0, 10); // 修改深克隆对象

    std::cout << "深克隆向量: ";

    deepCloneVec->print();

 

    // 浅克隆

    Vector* shallowCloneVec = vec1.shallowClone();

    shallowCloneVec->setValue(0, 20); // 修改浅克隆对象

    std::cout << "浅克隆向量: ";

    shallowCloneVec->print();

 

    // 清理动态分配的内存

    delete deepCloneVec;

    delete shallowCloneVec;

 

    return 0;

}

 

3、运行截图

 

4、比较

深克隆:安全,修改克隆对象不会影响原对象,代价是内存使用增加。

浅克隆:效率高,节省内存,但可能导致意外的修改,因为多个对象共享相同的内存。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823988.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十月二十九日

[实验任务一]:人与肤色 使用抽象工厂模式,完成下述产品等级结构:package test4;public class BlackFactory implements MWFactory {public Man produceMan(){return new BlackSkinMan();}public Woman produceWomen(){return new BlackSkinWomen();} }package test4;public …

十月三十日

[实验任务一]:计算机组装 使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。 package test5;public class Computer {private String CPU;private String RAM;private St…

10.30 实验6:原型模式

[实验任务一]:向量的原型 用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。 实验要求: 1.画出对应的类图; 2.提交源代码(用C++完成);#include <iostream> using namespace std; /…

读数据工程之道:设计和构建健壮的数据系统24获取数据的方式

获取数据的方式1. 数据库直连 1.1. 数据可以通过网络连接直接从数据库中通过查询和读取的方式来获取 1.2. 使用ODBC或JDBC进行的1.2.1. JDBC和ODBC长期以来是数据库数据获取的黄金标准,但对于许多数据工程应用程序来说,这些连接标准已经开始显示出它们年头已久1.2.2. 许多数据…

记 Kylin 麒麟系统安全中心拦截导致 dotnet sdk 找不到 OpenSsl 构建失败

错误信息如下 System.TypeInitializationException: The type initializer for Crypto threw an exception.---> System.DllNotFoundException: Unable to load shared library libSystem.Security.Cryptography.Native.OpenSsl or one of its dependencies. In order to he…

Zlibrary镜像网址及官网客户端app合集(持续更新)

Zlibrary镜像网址及官网客户端app合集(持续更新) Zlibrary数字图书馆介绍Zlibrary(简称 Z-lib)是一个影子图书馆,收录了超 1045 万本书籍和 8483 万篇文章,Zlibrary用户可以通过网络在该平台上下载所需的书籍和文章等资源,对于有大量文献资料需求的人来说,Zlibrary提供…

数据采集与融合技术实践作业3

102202143 梁锦盛 1.中国气象网信息爬取 爬取这个网站中的所有图片,控制总页数(学号尾数2位)、总下载的图片数量(尾数后3位)等限制爬取的措施 一、作业代码与展示 1.编写spider代码文件 import scrapy from urllib.parse import urljoin from scrapy.pipelines.images …

Bluetooth Audio Receiver使用(Win10)

Bluetooth Audio Receiver有时失灵重置设置即可

Tauri(一)——更适合 Web 开发人员的桌面应用开发解决方案 ✅

背景 我们最近决定开发一个开源的桌面端应用程序(先卖个关子,会尽快推出,敬请期待!关注一下不迷路!),并选择了 Tauri 作为技术方案。可能只有少部分人了解过它,感兴趣的朋友们可以一起深入探讨! Tauri 介绍官方网站:https://tauri.app/ (v2.0) GitHub:https://git…

Zlibrary入口电子图书馆官网最新可用镜像网址(持续更新)

Zlibrary电子图书馆介绍 Zlibrary 是全球最大电子数字图书馆之一,藏书丰富,有超 982 万册电子书及 8483 万余篇学术期刊文章。其涵盖经典文学、理工学科、人文艺术、学术论文等广泛领域,能满足各类求知者阅读学习需求。Zlibrary如一座知识宝库,为人们探索知识提供广阔资源,…

MASM的使用和DOS调试(微机原理课程作业)

1、指令 ———————————————— t:执行下一条语句。 u:查看汇编代码。 g:跳转到该内存所对应的语句 r:查看寄存器的内容(后可直接接寄存器的名称,就只查看该寄存器的内容)。 d:后接内存地址,查看该地址后面 8 * 16 个字节空间的地址(每行 16 个字节,共 8…

24山东省赛wp

24山东省赛wpmisc ezpic 在这个通道可以看到二维码扫一下能看到前半flag010里看到后半flag简单编码根据提示有,我们可以找到rot系列的rot13和rot47,尝试一下就有flag了pwn epwn 这回真是ezpwn了( 检查保护IDA找到漏洞函数gets和偏移量以及后门函数于是可以快乐的写exp了 from p…