zoukankan      html  css  js  c++  java
  • 原型模式向量的原型

    今天进行了原型模式---向量的原型的实验,最终成功运行了代码,也熟悉了原型模式的模式原理和意义所在

    下面是代码部分和要求部分:

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

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

    实验要求:

    1. 画出对应的类图;

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

    #include "stdafx.h"

    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的地址为" << p->len << endl;

    cout << "p1->len的地址为" << p1->len << endl;

    }

    else{

    cout << "这是深克隆" << endl;

    cout << "p->len的地址为" << p->len << endl;

    cout << "p1->len的地址为" << p1->len << endl;

    }

    system("pause");

    return 0;

    }

     

     

  • 相关阅读:
    2dsphere索引
    geoNear查询 near查询的升级版
    geoWithin查询 多边形查询
    [TJOI2013]最长上升子序列
    「bzoj3956: Count」
    「bzoj3687: 简单题」
    「SDOI2008沙拉公主的困惑」
    郑州Day6
    「Luogu-U18201」分析矿洞
    【[COCI2011-2012#5] POPLOCAVANJE】
  • 原文地址:https://www.cnblogs.com/092e/p/15530738.html
Copyright © 2011-2022 走看看