Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

두 개의 행렬을 추가하기 위해 더하기 연산자를 오버로드하는 C++ 프로그램

<시간/>

두 개의 행렬 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