首页 > 其他分享 >实验6:原型模式

实验6:原型模式

时间:2023-11-25 22:47:32浏览次数:30  
标签:begin end cout double len 实验 模式 原型 cp

实验6:原型模式

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

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

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

 

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

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

实验要求:

1. 对应的类图如下

 

 

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

测试截图

 

 

#include <tchar.h>  
#include<iostream>  
using namespace std;
class AbstractVector
{
    public:  
virtual AbstractVector* Clone() const = 0;
    virtual void showData() = 0;  
public:  
double* len;//向量长度'  
    double begin;
    double end;
};
class vector :public AbstractVector {  
public: vector(double beg, double en)
{
    begin = beg;
    end = en;
    len = new double;
    if (end >= begin)
        *len = end - begin;
    else
        *len = begin - end;
}
vector(const vector& cp)
{
    int cho = 0;
    begin = cp.begin;
    end = cp.end;
    cout << "深克隆输入1,浅克隆选择2" << endl;
    cin >> cho;
    if (cho == 1)
    {
        len = new double;
        *len = *(cp.len);
    }
    else
        len = cp.len;
}
void showData()
{
    cout << "向量的长度为" << *len << endl;
}
AbstractVector* Clone() const {  
return new vector(*this);  
}  
~vector() {
    delete len;
}  
};
int _tmain(int argc, _TCHAR* argv[])
{
    AbstractVector* p = new vector(0, 10);
    AbstractVector* p1 = p->Clone();
    cout << "p的长度为"; p->showData();
    cout << "p1的长度为"; p1->showData();
    if (p->len == p1->len)
    {
        cout << "这是浅克隆" << endl;
        cout << "被克隆对象的地址为" << p->len << endl;
        cout << "克隆后的地址为" << p1->len << endl;
    }
    else
    {
        cout << "这是深克隆" << endl;
        cout << "被克隆对象的地址为" << p->len << endl;
        cout << "克隆后的地址为" << p1->len << endl;
    } 

  

 

标签:begin,end,cout,double,len,实验,模式,原型,cp
From: https://www.cnblogs.com/130-gzh/p/17856254.html

相关文章

  • 实验7:单例模式
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图;  ......
  • 实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 对应的类图如下;  ......
  • 编译原理实验
       掌握了LR法进行语法分析的原理,掌握了语法分析器的设计与调试......
  • oracle数据库实验
       进行oracle数据库的学习,掌握数据的插入(INSERT)、修改(UPDATE)和删除(DELETE)操作。 掌握不同类型的数据查询(SELECT)操作。......
  • 设计模式相关复习短篇
    1--设计模式基本概念设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解、提高代码的可靠性。2--设计模式基本要素模式名称,问题,解决方案,效果模式别名,模式的分类,模式的适用性,模式角色,模式实例,模......
  • springBoot + 工厂模式 实现 快递鸟、顺丰和快递100的物流查询
    前言:在SpringBoot中实现快递鸟、顺丰和快递100的物流查询功能通常需要与它们提供的API进行交互。当然使用他们的API我们是需要申请和注册,从而去拿到key来进行调用。所以为注册的必须先进行注册,以下是他们的官网地址,可以快捷到达。快递鸟官网:快递鸟-快递查询接口_免费快递......
  • 设计模式之原型模式
    原型模式指的是,从对象copy一个对象到另一个对象浅拷贝:类对象copy的时候使用的是地址,基础类型会进行数据拷贝深拷贝:基础数据类型以及类对象都会进行数据copyspring创建对象的时候,可以选择单例,也可以选择原型模式原始的copy方式:需要拷贝的类@Getter@Setter@NoArgsConstru......
  • 创建型设计模式05-抽象工厂模式
    1、抽象工厂模式介绍抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,围绕一个超级工厂创建其他工厂,也称作为工厂的工厂(大工厂里的小工厂)。在抽象工厂模式中,接口负责创建一组相关对象的工厂,而不需要显式指定它们的类。这种设计模式能够将客户端与具体的实现分离,从而使得......
  • Nmap端口扫描实验
    一.实验目的了解网络扫描的基本概念和原理掌握市面上主流扫描工具Nmap的使用方法注意:本实验在虚拟机上面进行,仅用作交流学习,不可用于破坏他人计算机等一切非法活动,否则后果自负!二.实验环境Kali、windows7 三.实验工具Nmap扫描工具VMware上安装的攻击主机kali一台,将......
  • 交换机通过boot模式升级
    配置步骤1、交换机通过Console口连接配置PC机。通过MG口连接TFTP服务器,如果交换机上没有MG口则连接设备的1口。2、在TFTPServer上运行服务端程序,配置TFTPServer的IP地址为192.168.1.1/24。将升级所需的文件放置在TFTPServer的根目录。3、在配置PC上,打开超级终端程序,启动交换......