Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C++

A templated Matrix class using 2d dynamic array declaration & having The most needed Mathematical functions of Matrix & also all the operators needed in standard c++ (without using any vc commands)

1.30/5 (15 votes)
22 Feb 2007CPOL3 min read 1   676  
This program is written By Shahin Namini

Introduction

This Matrix class is a templated class that can be initialized as any kind of numeric types(int, double,float,& etc). it includes Inverse & determinant functions (which are not so easy to write the code) & also all the operators needed for a Matrix class like Multiplying 2 matrix or multiplying a digit to the matrix. it is able to be any size & also it is easy to use.

Instruction

the uploaded file check.zip contains a file which shows how the Matrix can get initialized & how the operators or functions work. Note that parentheses is maybe the most important operator.it allows you to get access to the array elements ,as :

matrix1(2,0)=5;

Member functions of class Matrix

These are all the member functions & operators of the class :

template<class T>
class Matrix
{
public:

  1. Matrix(int Row_Size,int Column_Size)
  2. Matrix() >
  3. Matrix(const Matrix<T> &)
  4. ~Matrix(void)
  5. void Set_Element(int Row_,int Column,const T& Value)
  6. T Get_Element(int Row ,int Column) const
  7. bool operator!() const;
  8. const Matrix<T> & operator=(const Matrix<T> &)
  9. const Matrix<T> & operator=(const T&)
  10. bool operator==(const Matrix<T> &) const
  11. bool operator==(const T & ) const
  12. bool operator!=(const Matrix<T> & second) const
  13. bool operator!=(const T & number)
  14. T &operator() (int Row,int Column)
  15. Matrix<T> operator+(const T &)
  16. Matrix<T> operator+(const Matrix<T> &)
  17. const Matrix<T> &operator+=(const T&)
  18. const Matrix<T> & operator+=(const Matrix<T> &)
  19. Matrix<T> operator-(const T&)
  20. Matrix<T> operator - (const Matrix<T> &)
  21. const Matrix<T> & operator -=(const T & )
  22. const Matrix<T> & operator -=(Matrix<T> & )
  23. Matrix<T> operator*(const T&)
  24. Matrix<T> operator* (const Matrix<T> &)
  25. const Matrix<T> & operator*=(const T&)
  26. const Matrix<T> & operator*=(const Matrix<T> &)
  27. void Transposed();>
  28. Matrix<T> GetTransposed() const
  29. bool Inverse();>
  30. Matrix<T> GetInversed() const
  31. double Det() const
  32. void Set_Size(int RowSize,int ColumnSize)
  33. const int& Get_ColumnSize() const
  34. const int & Get_RowSize() const
private:
  • int m_RowSize
  • int m_ColumnSize
  • T**m_Data

};

Notes


note:The returned argument of Inverse (a boolean ) Shows weather the matrix is Invertible & if it is ,inverts the Matrix


note:I have written this code in vc 2005 but it is not a managed code.if you compile it in vc6 you will see some errors that as an instance i is redeclared .thats because vc6 is alittle differant as when you declare i this way :for (int i=0;i<5;i++){ /*statements*/}

i is destroyed after for statement but in vc6 it is a declared variable even after for statement.but it is easy to change it to vc6 by debugging such errors in vc.you can do it yourself.


note:the only code i have not written my self is determinant because i have found a great one being written by Paul Bourke .to find the original code go to http://local.wasp.uwa.edu.au/~pbourke/other/determinant/

Some Technics that are used in Class

to announce one,I have to point to the way the element array (m_Data) is declared using new command:

consider the m_RowSize & m_ColumnSize are given

m_Data=new T* [m_RowSize];

for(int i=0;i<m_RowSize;i++)

m_ColumnSize=new T [m_ColumnSize];

HOPE YOU USE & ENJOY IT

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)