用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; }
运行截图