C++ 向量类+=运算符重载:详细指南及示例代码
要重载向量类的 += 运算符,您可以在向量类中添加成员函数或友元函数来实现。以下是一个示例代码,演示了如何重载向量类的 += 运算符:
#include <iostream>
#include <cmath>
class Vector {
public:
// 构造函数
Vector(int dim) : size(dim), data(new double[size]) {}
// 拷贝构造函数
Vector(const Vector& other) : size(other.size), data(new double[size]) {
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
}
// 析构函数
~Vector() {
delete[] data;
}
// 重载 [] 运算符以允许访问向量元素
double& operator[](int index) {
if (index >= 0 && index < size) {
return data[index];
} else {
throw std::out_of_range('Index out of range');
}
}
// 重载 const 版本的 [] 运算符,以允许在常量对象上访问元素
const double& operator[](int index) const {
if (index >= 0 && index < size) {
return data[index];
} else {
throw std::out_of_range('Index out of range');
}
}
// 重载 += 运算符,实现向量的累加
Vector& operator+=(const Vector& other) {
if (size != other.size) {
throw std::invalid_argument('Vector sizes are not equal');
}
for (int i = 0; i < size; i++) {
data[i] += other.data[i];
}
return *this;
}
// 获取向量模长
double getMagnitude() const {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += data[i] * data[i];
}
return std::sqrt(sum);
}
// 输出向量内容
void print() const {
std::cout << 'Vector: ( ';
for (int i = 0; i < size - 1; i++) {
std::cout << data[i] << ', ';
}
std::cout << data[size - 1] << ' )' << std::endl;
}
private:
double* data;
int size;
};
// 重载 + 运算符,实现向量相加
Vector operator+(const Vector& v1, const Vector& v2) {
Vector result(v1);
result += v2;
return result;
}
int main() {
// 创建两个向量对象
Vector v1(3);
Vector v2(3);
// 设置向量元素的值
v1[0] = 1;
v1[1] = 2;
v1[2] = 3;
v2[0] = 4;
v2[1] = 5;
v2[2] = 6;
// 输出向量内容
v1.print();
v2.print();
// 进行向量加法
Vector sum = v1 + v2;
sum.print();
// 进行向量累加
v1 += v2;
v1.print();
return 0;
}
在这个示例中,我们重载了 += 运算符,使得可以直接通过 v1 += v2 来实现向量的累加。另外,我们还重载了 + 运算符,使得可以通过 v1 + v2 来实现向量相加,返回一个新的向量对象。您可以根据需要修改和扩展该类,以满足您的具体需求。
原文地址: https://www.cveoy.top/t/topic/b4M2 著作权归作者所有。请勿转载和采集!