📜  C ++ |运算符重载|问题10(1)

📅  最后修改于: 2023-12-03 14:39:38.846000             🧑  作者: Mango

C++ | 运算符重载 | 问题10

运算符重载是 C++ 中的一个强大、灵活的特性,可以让你自定义现有的运算符(比如 +-*/ 等)的行为,使其能够适用于自定义的类或数据类型。这个特性在 C++ 中被广泛使用,在编写复杂的数据处理和算法时非常有用。

问题描述

本题要求你实现一个矩阵类 Matrix,其中包含一个二维整数数组 data,以及 operator+ 运算符重载,使得两个 Matrix 对象可以相加,返回一个新的 Matrix 对象。

数据结构

我们先定义 Matrix 类的数据结构:

class Matrix {
public:
    int rows, cols;
    vector<vector<int>> data;
    Matrix() : rows(0), cols(0) {}
    Matrix(int rows_, int cols_) : rows(rows_), cols(cols_), data(rows, vector<int>(cols)) {}
};
运算符重载

实现 operator+ 函数,可以使用下面的代码:

Matrix operator+(const Matrix& a, const Matrix& b) {
    assert(a.rows == b.rows && a.cols == b.cols);
    Matrix c(a.rows, a.cols);
    for (int i = 0; i < a.rows; i++) {
        for (int j = 0; j < a.cols; j++) {
            c.data[i][j] = a.data[i][j] + b.data[i][j];
        }
    }
    return c;
}

这段代码可以实现两个矩阵相加的功能。operator+ 函数接受两个矩阵 ab 作为参数,并返回一个新的矩阵 c,其中元素为 ab 对应元素的和。

接下来是 operator+ 函数的详细解释:

  • 首先,使用 assert 函数检查矩阵 ab 的大小是否相同。如果不同,程序将抛出一个异常,终止程序运行。
  • 然后,创建一个新的矩阵 c,和 ab 的大小相同。
  • 接着,使用两个循环遍历每一个元素,将 ab 的对应元素相加并赋值给 c
  • 最后,返回 c 矩阵。
测试样例

以下是一个简单的测试样例:

Matrix a(3, 3);
a.data = {{1, 2, 3},
          {4, 5, 6},
          {7, 8, 9}};
Matrix b(3, 3);
b.data = {{9, 8, 7},
          {6, 5, 4},
          {3, 2, 1}};
Matrix c = a + b;
for (int i = 0; i < c.rows; i++) {
    for (int j = 0; j < c.cols; j++) {
        cout << c.data[i][j] << " ";
    }
    cout << endl;
}

输出结果如下:

10 10 10 
10 10 10 
10 10 10 

可以看到,程序成功将两个矩阵相加,并得到了正确的输出。

总结

运算符重载是 C++ 中一个强大的特性,可以让你定义自己的运算符行为,从而使程序更加灵活、高效。在本题中,我们使用了运算符重载实现了矩阵的相加功能,为数据处理和算法提供了更强大的工具。