原型模式
用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
类图
浅克隆
#include <iostream>
using namespace std;
class Vector{
private:
int* xl;
int len;
public:
Vector(int len1){
xl = new int[len]();
len = len1;
}
~Vector(){}
Vector(const Vector& fs){
//浅克隆
xl = fs.xl;
len = fs.len;
}
void show(){
int i = 0;
cout << "向量为:";
for (i = 0; i < (len - 1); i++){
cout << xl[i] << ",";
}
cout << xl[len - 1] << endl;
}
void setXl(){
int i = 0;
for (i = 0; i < len; i++){
cout << "请输入向量的第" << i + 1 << "个值:";
cin >> xl[i];
}
cout << "录入完成!" << endl;
}
};
int main(){
cout << "请输入向量的维数:";
int n;
cin >> n;
Vector v1(n);
Vector v2 = v1;
v1.setXl();
cout << "v1:";
v1.show();
cout << "v2:";
v2.show();
cout << "修改v1" << endl;
v1.setXl();
v1.show();
v2.show();
return 0;
}
深克隆
#include <iostream>
using namespace std;
class Vector {
private:
int* xl;
int len;
public:
Vector(int len1) {
xl = new int[len]();
len = len1;
}
~Vector() {}
Vector(const Vector& fs) {
//深克隆
int i;
xl = new int[fs.len]();
for (i = 0; i < fs.len; i++) {
xl[i] = fs.xl[i];
}
int temp = fs.len;
len = temp;
}
void show() {
int i = 0;
cout << "向量为:";
for (i = 0; i < (len - 1); i++) {
cout << xl[i] << ",";
}
cout << xl[len - 1] << endl;
}
void setXl() {
int i = 0;
for (i = 0; i < len; i++) {
cout << "请输入向量的第" << i + 1 << "个值:";
cin >> xl[i];
}
cout << "录入完成!" << endl;
}
};
int main() {
cout << "请输入向量的维数:";
int n;
cin >> n;
Vector v1(n);
v1.setXl();
Vector v2 = v1;
cout << "v1:";
v1.show();
cout << "v2:";
v2.show();
cout << "修改v1" << endl;
v1.setXl();
v1.show();
v2.show();
return 0;
}
运行截图




浙公网安备 33010602011771号