C++で行列の加算および減算を実装するには、演算子オーバーロードをどのように行えばよいですか?

行列式の足し算と引き算を実行するには、足し算演算子と引き算演算子をオーバーロードする必要があります。以下にサンプルコードを示します。

#include <iostream>
#include <vector>

class Matrix {
private:
    int rows;
    int cols;
    std::vector<std::vector<int>> data;

public:
    Matrix(int r, int c) : rows(r), cols(c) {
        data.resize(rows, std::vector<int>(cols, 0));
    }

    void setValue(int r, int c, int value) {
        data[r][c] = value;
    }

    Matrix operator+(const Matrix& other) const {
        if (rows != other.rows || cols != other.cols) {
            throw std::runtime_error("Matrix dimensions don't match");
        }

        Matrix result(rows, cols);

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                result.data[i][j] = data[i][j] + other.data[i][j];
            }
        }

        return result;
    }

    Matrix operator-(const Matrix& other) const {
        if (rows != other.rows || cols != other.cols) {
            throw std::runtime_error("Matrix dimensions don't match");
        }

        Matrix result(rows, cols);

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                result.data[i][j] = data[i][j] - other.data[i][j];
            }
        }

        return result;
    }

    void print() const {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                std::cout << data[i][j] << " ";
            }
            std::cout << std::endl;
        }
    }
};

int main() {
    Matrix A(2, 2);
    A.setValue(0, 0, 1);
    A.setValue(0, 1, 2);
    A.setValue(1, 0, 3);
    A.setValue(1, 1, 4);

    Matrix B(2, 2);
    B.setValue(0, 0, 5);
    B.setValue(0, 1, 6);
    B.setValue(1, 0, 7);
    B.setValue(1, 1, 8);

    Matrix C = A + B;
    C.print();
    std::cout << std::endl;

    Matrix D = A - B;
    D.print();

    return 0;
}

上記のコードでは、行列を表すMatrixクラスを定義しています。Matrixクラスでは、2つのMatrixオブジェクトの対応する要素を加算または減算するために、加算演算子と減算演算子をオーバーロードしています。オーバーロードされた加算と減算演算子関数では、まず2つのMatrixオブジェクトの次元が同じかどうかを確認し、異なる場合は例外をスローします。次に、結果を格納する新しいMatrixオブジェクトを作成し、各要素を繰り返し処理して対応する加算または減算を行います。最後に、結果のMatrixオブジェクトを返します。

主関数で、MatrixオブジェクトAとBを作成し、それぞれに値を割り当てました。そして、オーバーロードされた加算演算子と減算演算子を使用して、A + BとA – Bを計算し、結果を出力しました。

bannerAds