11.1

实验6:原型模式

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

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

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

 

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

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

实验要求:

 

类图

 

 

源代码:

浅克隆代码

#include<iostream>

using namespace std;

class Vector {

private:

int *p;

int len;

public:

Vector(int len);

Vector(const Vector &vector);

    Vector1(const Vector &vector);

~Vector();

int operator[](int i)const {

return p[i];

}

int &operator[](int i) {

return p[i];

}

int length()const {

return len;

}

};

Vector::Vector(int len):len(len) {

p=(int*)calloc(len,sizeof(int));

}

//拷贝构造函数

Vector::Vector(const Vector &vector) {

this->len=vector.len;

this->p=vector.p;

}

Vector::~Vector() {

free(p);

}

//打印

void display(const Vector &vector) {

int len=vector.length();

for(int i=0; i<len; i++) {

if(i==len-1) {

cout<<vector[i]<<endl;

} else {

cout<<vector[i]<<",";

}

}

}

int main() {

Vector v1(10);

for(int i=0; i<10; i++) {

v1[i]=i;

}

Vector v2=v1;

v2[6]=55;

v2[2]=20;

cout<<"浅克隆:"<<endl;

cout<<"更改copyVector后vector的数据:"<<endl;

display(v1);

cout<<"更改copyVector后copyVector的数据:"<<endl;

display(v2);

return 0;

}

 

 

 

深克隆:

 

#include<iostream>

using namespace std;

class Vector {

private:

int *p;

int len;

public:

Vector(int len);

Vector(const Vector &vector);

    Vector1(const Vector &vector);

~Vector();

int operator[](int i)const {

return p[i];

}

int &operator[](int i) {

return p[i];

}

int length()const {

return len;

}

};

Vector::Vector(int len):len(len) {

p=(int*)calloc(len,sizeof(int));

}

//拷贝构造函数

Vector::Vector(const Vector &vector) {

this->len=vector.len;

this->p=(int*)calloc(this->len,sizeof(int));

memcpy(this->p,vector.p,len*sizeof(int));

}

Vector::~Vector() {

free(p);

}

//打印

void display(const Vector &vector) {

int len=vector.length();

for(int i=0; i<len; i++) {

if(i==len-1) {

cout<<vector[i]<<endl;

} else {

cout<<vector[i]<<",";

}

}

}

int main() {

Vector v1(10);

for(int i=0; i<10; i++) {

v1[i]=i;

}

Vector v2=v1;

v2[6]=55;

v2[2]=20;

cout<<"深克隆:"<<endl;

cout<<"更改copyVector后vector的数据:"<<endl;

display(v1);

cout<<"更改copyVector后copyVector的数据:"<<endl;

display(v2);

return 0;

}

 

posted @ 2024-11-13 23:12  七安。  阅读(1)  评论(0编辑  收藏  举报