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

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

时间:2023-11-03 20:11:05浏览次数:35  
标签:index 软件设计 vector1 int Vector 实验 原型 data size

 

实验6:原型模式

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

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

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

 

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

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

实验要求:

1. 画出对应的类图;

 

 

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

#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;

}

 

3.注意编程规范。

标签:index,软件设计,vector1,int,Vector,实验,原型,data,size
From: https://www.cnblogs.com/DREAM2021/p/17808326.html

相关文章

  • 实验三
    #include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);//函数声明voidprint_spaces(intn);//函数声明voidprint_blank_lines(intn);//函数声明intmain()......
  • 实验三
    任务一task1.cpp1#include<iostream>2#include"point.hpp"3#include<vector>4usingstd::vector;5usingstd::cin;6voidoutput(constvector<Point>&v){7for(auto&t:v)8t.show();9}10voidtest()......
  • 实验3—C语言函数应用编程
    1、实验任务1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN806voidprint_text(intline,intcol,chartext[]);//函数声明7voidprint_spaces(intn);//函数声明8voidprint_b......
  • ensp实验,大一必学网工基础,数通HCIA内容,详细知识点集合
    1:交换机通信:两个pc端在一个网段内,不用单独配置交换机信息,不用设置网关地址,都能ping通2:路由器通信:Pc的网关地址是路由器的ip地址。路由器配置接口和地址Pc3pingpc4即可3:静态路由:静态路由配置好PC的ip地址、子网掩码、网关和路由器接口的地址信息。在R7路由器输入:[R7]iproute-stat......
  • 国产教学实验箱_嵌入式实验箱:3-4 mp3音频解码实验
    一、实验目的了解MP3文件的结构,掌握MP3音频解码的原理,并实现基于SYSBIOS系统,将MP3格式的音频解码为PCM格式。二、实验原理1、MP3音频格式MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(MovingPictureExpertsGroupAudioLayerIII),简称为MP3。它被设计用来大幅度地......
  • 实验三
     #include<stdio.h>intfunc(intn,intm);intmain(){intn,m;while(scanf("%d%d",&n,&m)!=EOF)printf("n=%d,m=%d,ans=%d\n",n,m,func(n,m));return0;}intfunc(intn,intm){if(n<m)......
  • JVM 调优实验
    JVM调优理论前言关于性能优化Therealproblemisthatprogrammershavespentfartoomuchtimeworryingaboutefficiencyinthewrongplacesandatthewrongtimes;prematureoptimizationistherootofallevil(oratleastmostofit)inprogramming.—D......
  • Linux 实验
    知识补充框架设计Linux操作可以分为本地操作和网络操作,操作对象主要是文件和目录,根据上述分类设计框架如下本地操作基础指令:系统一般内置目录目录切换:cd增删改查mkdirrmdir权限管理:chmodchmod命令的具体用法如下:chmod[选项]模式文件其中,模式是......
  • 操作系统实验——进程管理的算法实现
    前言笔者在大学下属的事业单位上班,最近去帮着带下操作系统的实验课,这里随手水点参考代码,欢迎各位领导老师莅临指正实验目标编写一个简单的进程调度器实验内容进程控制块(PCB)的定义与管理进程调度算法的实现进程创建、销毁和切换给定一批进程对比3-4种调度算法的时间(自选算......
  • 【单片机】I/O口实验
    要求:拨动开关,让所亮小灯位置左移或者右移#include<STC8.H>#include<intrins.h>voiddelay(){ inti,j; for(i=0;i<1000;i++){ for(j=0;j<1000;j++); }}charmove_left(charvalue,intnumber){ value=_crol_(value,number); returnvalue; }charmov......