두 개의 행렬 mat1과 mat2가 있다고 가정합니다. 우리는 이 두 행렬을 더하고 세 번째 행렬을 형성해야 합니다. 더하기 연산자를 오버로드하여 이 작업을 수행해야 합니다.
따라서 입력이 다음과 같으면
5 | 8 |
9 | 6 |
7 | 9 |
8 | 3 |
4 | 7 |
6 | 3 |
그러면 출력은
13 | 11 |
13 | 13 |
13 | 12 |
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
더하기 연산자를 오버로드하면 다른 행렬 매트가 두 번째 인수로 사용됩니다.
-
하나의 빈 2D 배열 vv 정의
-
하나의 2D 배열 vv를 정의하고 여기에 현재 행렬 요소를 로드합니다.
-
initialize i :=0의 경우 i
-
j 초기화의 경우:=0, j
- vv[i, j] :=vv[i, j] + mat.a[i, j]
-
- vv를 사용하여 새 행렬 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <iostream> #include <vector> using namespace std; class Matrix { public: Matrix() {} Matrix(const Matrix& x) : a(x.a) {} Matrix(const vector<vector<int>>& v) : a(v) {} Matrix operator+(const Matrix&); vector<vector<int>> a; void display(){ for(int i = 0; i<a.size(); i++){ for(int j = 0; j<a[i].size(); j++){ cout << a[i][j] << " "; } cout << endl; } } }; Matrix Matrix::operator+(const Matrix& m){ vector<vector<int>> vv = a; for (int i=0; i<vv.size(); i++){ for (int j=0; j<vv[0].size(); j++){ vv[i][j] += m.a[i][j]; } } return Matrix(vv); } int main(){ vector<vector<int>> mat1 = {{5,8},{9,6},{7,9}}; vector<vector<int>> mat2 = {{8,3},{4,7},{6,3}}; int r = mat1.size(); int c = mat1[0].size(); Matrix m1(mat1), m2(mat2), res; res = m1 + m2; res.display(); }
입력
{{5,8},{9,6},{7,9}}, {{8,3},{4,7},{6,3}}
출력
13 11 13 13 13 12