I have matrix class that implements a 2-dimensional array of "integers". I now want to convert this to a class template so that I can have 2-dimensional arrays of "any types". Not for sure how to start. Any suggestions would be greatly appreciated.
AQuaman
#include <algorithm>
#include <cassert>
#include "matrix.h"
Matrix::Matrix()
: data(0), _length1(0), _length2(0)
{}
Matrix::Matrix(unsigned theLength1, unsigned theLength2)
: _length1(theLength1), _length2(theLength2)
{
data = new int[theLength1*theLength2];
}
Matrix::Matrix(const Matrix& m)
: _length1(m._length1), _length2(m._length2)
{
data = new int[_length1*_length2];
copy (m.data, m.data+_length1*_length2, data);
}
Matrix::~Matrix()
{
delete [] data;
}
const Matrix& Matrix:perator= (const Matrix& m)
{
if (this != &m)
{
if (_length1*_length2 < m._length1*m._length2)
{
delete [] data;
data = new int[m._length1*m._length2];
}
_length1 = m._length1;
_length2 = m._length2;
copy (m.data, m.data+_length1*_length2, data);
}
return *this;
}
int& Matrix:perator() (int i1, int i2)
{
assert ((i1 >= 0) && (i1 < _length1));
assert ((i2 >= 0) && (i2 < _length2));
return data[i1 + _length1*i2];
}
const int& Matrix:perator() (int i1, int i2) const
{
assert ((i1 >= 0) && (i1 < _length1));
assert ((i2 >= 0) && (i2 < _length2));
return data[i1 + _length1*i2];
}
bool Matrix:perator== (const Matrix& m) const
{
return (_length1 == m._length1)
&& (_length2 == m._length2)
&& equal (data, data+_length1*_length2, m.data);
}