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