用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。
实验要求:
1. 画出对应的类图;
2. 提交源代码(用C++完成);
#include <iostream>
using namespace std;
// 向量类
class Vector {
private:
int *p; // 动态数组
int len; // 数组长度
public:
Vector(int len); // 构造函数
Vector(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 = new int[len](); // 使用 new 分配内存并初始化为 0
}
// 拷贝构造函数(深拷贝)
Vector::Vector(const Vector &vector) {
this->len = vector.len; // 复制长度
this->p = new int[len]; // 为新对象分配内存
for (int i = 0; i < len; i++) {
this->p[i] = vector.p[i]; // 逐个复制元素
}
}
// 析构函数
Vector::~Vector() {
delete[] 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); // 创建一个大小为 10 的向量
for (int i = 0; i < 10; i++) {
v1[i] = i; // 初始化向量
}
Vector v2 = v1; // 使用拷贝构造函数进行深拷贝
v2[6] = 55; // 修改 v2 的内容
v2[2] = 20; // 修改 v2 的内容
cout << "深拷贝:" << endl;
cout << "更改copyVector后vector的数据:" << endl;
display(v1); // 显示 v1 的内容
cout << "更改copyVector后copyVector的数据:" << endl;
display(v2); // 显示 v2 的内容
return 0;
}
posted @
2024-10-30 22:55
涨涨涨张
阅读(
5)
评论()
编辑
收藏
举报