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を計算し、結果を出力しました。