マトリックステンプレートクラス

2167 ワード

#include 
#include 
#include 
using namespace std;

template  
class CMatrix
{
public:    
   CMatrix();
   CMatrix(int row, int col);
   CMatrix(int row, int col, T *data);
   CMatrix(CMatrix& m2);
   void PrintMat();
   ~CMatrix();

   T **mp_data;
   int m_row;
   int m_col;
};

template  
CMatrix::CMatrix()
{
	m_row = m_col = 0;
	mp_data = NULL;
}

template  
CMatrix::~CMatrix()
{
	for (int i = 0; i < m_row; ++i)
	{
		delete [] mp_data[i];
		mp_data[i] = NULL;
	}
	delete []mp_data;
	mp_data = NULL;
}

template  
CMatrix::CMatrix(int row, int col)
{
	m_row = row;
	m_col = col;
	mp_data = new T*[m_row];
	for (int i = 0; i < m_row; ++i)
	{
		mp_data[i] = new T[m_col];
	}
	for (int i = 0; i < m_row; ++i)
	{
		for (int j = 0; j < m_col; ++j)
		{
			mp_data[i][j] = 0;
		}
	}
}

template  
CMatrix::CMatrix(int row, int col, T *data)
{
	m_row = row;
	m_col = col;
	mp_data = new T*[m_row];
	for (int i = 0; i < m_row; ++i)
	{
		mp_data[i] = new T[m_col];
	}

	for (int i = 0; i < m_row; ++i)
	{
		for (int j = 0; j < m_col; ++j)
		{
			mp_data[i][j] = data[j + i * m_col];
		}
	}
}

template  
CMatrix::CMatrix(CMatrix& m2)
{
	m_row = m2.m_row;
	m_col = m2.m_col;
	mp_data = new T*[m_row];
	for (int i = 0; i < m_row; ++i)
	{
		mp_data[i] = new T[m_col];
	}

	for (int i = 0; i < m_row; ++i)
	{
		for (int j = 0; j < m_col; ++j)
		{
			mp_data[i][j] = m2.mp_data[i][j];
		}
	}
}

template  
void CMatrix::PrintMat()
{
	for (int i = 0; i < m_row; ++i)
	{
		for (int j = 0; j < m_col; ++j)
		{
			cout << mp_data[i][j] << " ";
		}
		cout << endl;
	}
}

int main(void) 
{ 
	int data[] = {1,2,3,4,5,6};

	CMatrix mat1;
	mat1.PrintMat();
	
	CMatrix mat2(2,2);
	mat2.PrintMat();

	CMatrix mat3(2,3,data);
	mat3.PrintMat();

	CMatrix mat4(mat3);
	mat4.PrintMat();
	return 0; 
}