How to Multiply two matrices using operator overloading in C++

Here in this tutorial, we will multiply two matrices using operator overlaoding in C++. C++ does not allow the use of operators on user-defined data types. Hence, we can use operator overloading to redefine operators.

Multiplication of two matrices using operator overloading in C++

Our approach will be to create a class named matrix and redefine the multiplication operator to multiply two matrices. First, we must have a good understanding of class and objects and operator overloading:

Here are some links to check out before starting this tutorial:

 

First, we will create a class called matrix and will create two functions in it. One to take input into a matrix object and another an operator which we will redefine. Operator overloading is basically redefining an operator to be able to do operations on user-defined classes.

include <bits/stdc++.h>
using namespace std;

int n;
class matrix{

private:
    int arr[50][50];

public:
    void input(vector<vector<int>>& a);
    void operator *(matrix x);

};

 

Then we will define the functions, first the “input” function.

void matrix::input(vector<vector<int>>& a){

  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      arr[i][j]=a[i][j];
    }
  }
}

 

Next, we will redefine the operator * declared in the class “matrix”. We have created a “result” matrix to store the product. Also, we have written the code to display the result matrix to simply print it after multiplication.

void matrix::operator *(matrix x){

  int result[n][n];

  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      result[i][j]=0;
      for(int k=0;k<n;k++){
        result[i][j]=result[i][j]+arr[i][k]*(x.arr[k][j]);
      }
    }
  }
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      cout<<result[i][j]<<" ";
    }cout<<endl;
  }
}

 

Here is the full code:

#include <bits/stdc++.h>
using namespace std;

int n;
class matrix{

private:
    int arr[50][50];

public:
    void input(vector<vector<int>>& a);
    void operator *(matrix x);

};

void matrix::input(vector<vector<int>>& a){

  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      arr[i][j]=a[i][j];
    }
  }
}

void matrix::operator *(matrix x){

  int result[n][n];

  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      result[i][j]=0;
      for(int k=0;k<n;k++){
        result[i][j]=result[i][j]+arr[i][k]*(x.arr[k][j]);
      }
    }
  }
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      cout<<result[i][j]<<" ";
    }cout<<endl;
  }
}

int main(){

  n=3;
  
  vector<vector<int>>m1={{1,2,3},{4,5,6},{7,8,9}};
  vector<vector<int>>m2={{1,2,3},{4,5,6},{7,8,9}};

  matrix matrixobject1;
  matrix matrixobject2;

  matrixobject1.input(m1);
  matrixobject2.input(m2);

  matrixobject1*matrixobject2;
  
}

 

Output:

Product matrix is:
30 36 42
66 81 96
102 126 150

Leave a Reply

Your email address will not be published. Required fields are marked *