2x2 matrix math class

Posted on 2004-04-05
Medium Priority
Last Modified: 2008-02-01
#ifndef MAT_H
#define MAT_H

// 2x2 Matrix Math

class Matrix {


      Matrix(int=1, int=0, int=0, int=1);
      Matrix(const Matrix &m);
      Matrix &operator = (const Matrix &m);
      Matrix matriAdd(const Matrix &m) const;
      Matrix matriSub(const Matrix &m) const;
      Matrix matriMul(const Matrix &m) const;
                Matrix matriDiv(const Matrix &m) const;
      int getElement(void);
      void setElement(void);
      double &operator () int i, int j);
      void matriPrint() const;
        void matriClear() const;


      int width;
      int height;
      double *data;


#endif#include <iostream>

using namespace std;

#include "mat.h"

Matrix::Matrix() {width=0; height=0; data=0;}

Matrix::Matrix(intw, int h) {

      width = w;
      height = h;

      date = new double[width*height];


Matrix::Matrix(const Matrix &m) {

      width = m.width;
      height = m.height;

      date = new double[width*height];

      for(int k=0; k < width*height; k++)
         data[k] = m.data[k];


Matrix::~Matrix() {

      delete[] data;


bool Matrix::operator == (const Matrix &m) const {

      if(width != m.width || height != m.height)

      return false;

      for(int k=0; k < width*height; k++)
         if(data[k] != m.data[k])
            return false;

      return true;


Matrix &Matrix::operator = (const Matrix &m) {

      if(&m != this) {
        delete[] data;

        width = m.width; height = m.height;
        data = new double[width*height];

        for(int k=0; k < width*height; k++)
           data[k] = m.data[k];


      return *this;


Matrix Matrix::operator+(const Matrix &m) const {

      if(width != m.width; || height != m.height) {
        cerr << "Size error!\n";


Matrix result(width, height);

      for(int k=0; k < width*height; k++)
         result.data[k] = data[k] + m.data[k];

      return result;


Matrix Matrix::operator*(const Matrix &m) const {

      if(width != m.height) {
        cerr << "Size error!\n";



      Matrix result(m.width, height);

            for(int i=0; i < m.width; i++0
               for(int j=0; j < height; j++) {
                  double s = 0;

                  for(int k=0; k < width; k++)
                        s += data[k+j*width]*m.data
                        [i + m.width*k];
                        result.data[i + m.width*j] = s;


      return result;


double &Matrix::operator() (int i, int j) {

      if(i < 0 || i >= width || j < 0 || j >= height) {
        cerr << "Out of bounds!\n";



      return data[i + width*j];


void Matrix::print() const {

      for(int j=0; j < height; j++) {
         for(int i=0; i < width; i++)
            cout << " " << data[i + width * j];

      cout << "\n";



#include <iostream>

using namespace std;

#include "mat.h"

int main(int argc, char **argv) {

      Matrix m(3,2), n(5,3);

      m(0,0) = 2.0; m(1,0) = 0.0; m(2,0) = 0.0;
      m(0,1) = 2.0; m(1,1) = 0.0; m(2,1) = 0.0;

      n(0,0) = 1.0; n(1,0) = 2.0; n(2,0) = 3.0; n(3,0)
      = 4.0; n(4,0) = 5.0;

      n(0,1) = 2.0; n(1,1) = 3.0; n(2,1) = 4.0; n(3,1)
      = 5.0; n(4,1) = 6.0;

      n(0,2) = 3.0; n(1,2) = 4.0; n(2,2) = 5.0; n(3,2)
      = 6.0; n(4,2) = 7.0;

      Matrix x = m*n;



I need to write a program that consists of a 2x2 array that uses member functions add, sub, mul, and div.  Need help, need program to follow the functions in the header.  As you can see, I am having trouble putting 2 and 2 together.  Please advise.  Thank you.  Del      

Question by:edelossantos
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
LVL 30

Expert Comment

ID: 10762738
Is this homework?

If this is not homework, why re-invent the wheel.

Check out the following links:
Matrix class implemented using valarrays:



Matrix Template Library (MTL):

boost libray multi-array class:
LVL 30

Expert Comment

ID: 10762744

("C++ library for "tiny" vectors and matrices with expression templates")

("Numerical Matrix/Vector Classes in C++ ")

LVL 30

Accepted Solution

Axter earned 1500 total points
ID: 10762753
With all the availability of existing classes that have the functionality you're looking for, there's no real practical reason to start from scratch.

I recommend you use one of the above sources instead.

Author Comment

ID: 10821450
Yes, this is homework and this is what I have put together.  Need help in fine tunning the program so it will run.  Any ideas, please advise.  Del

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question