C++ 重载向量类 += 运算符:实现高效向量加法
C++ 重载向量类 += 运算符:实现高效向量加法
在 C++ 中,运算符重载是一种强大的机制,允许开发者自定义运算符的行为,使其能够操作用户自定义类型。本文将重点介绍如何重载向量类的 += 运算符,以实现简洁高效的向量加法操作。
代码示例
以下是一个完整的 C++ 代码示例,演示了如何重载向量类的 += 运算符:cpp#include
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) const { if (size != other.size) { throw std::invalid_argument('Vector sizes are not equal'); }
Vector result(size); for (int i = 0; i < size; i++) { result.data[i] = data[i] + other.data[i]; }
return result; }
// 重载 += 运算符 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;};
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;}
代码解释
-
operator+=函数: 该函数实现了+=运算符的重载。它接受一个Vector对象作为参数,表示要加到当前向量上的向量。函数首先检查两个向量的维度是否相等,如果不相等则抛出异常。然后,它遍历两个向量的所有元素,将对应元素相加,并将结果存储在当前向量的对应元素中。最后,函数返回当前向量的引用,以便进行链式操作。 -
使用示例: 在
main函数中,我们创建了两个向量对象v1和v2,并使用+=运算符将v2加到v1上。v1 += v2;语句等效于v1 = v1 + v2;,但效率更高,因为它不需要创建临时对象。
总结
通过重载 += 运算符,我们可以为自定义的向量类提供简洁直观的语法,用于执行向量加法操作。这不仅提高了代码的可读性,还提高了代码的效率。
原文地址: https://www.cveoy.top/t/topic/b4wL 著作权归作者所有。请勿转载和采集!