您的代码中进行了一些修改,但是存在一些问题。首先,在成员函数 operator+= 的定义中,应该将它声明为非常量成员函数,因为它会修改当前对象的状态。其次,在进行向量累加时,应该使用当前对象的 data 成员,而不是 data 成员的 size。此外,您可以通过抛出异常来处理向量维度不匹配的情况,而不是简单地输出错误信息。

以下是修正后的代码示例:

#include <iostream>
#include <cmath>
#include <stdexcept>

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;
}

现在,这个示例中的向量类可以进行向量的累加操作,并处理向量维度不匹配的情况。您可以根据需要修改和扩展该类,以满足您的具体需求。

C++ Vector 类重载 += 运算符的优化

原文地址: https://www.cveoy.top/t/topic/b6dl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录