关键在于他有很多要求,不在于乘法的实现,要用类来封装矩阵,还要用模板,初学者感觉困难,求思路,最好有代码,谢
找找模板封装的例子看看,只是用typename T来代替数据类型而已。
参考如下:
#include <iostream>
using namespace std;
template <typename T>
class Matrix
{
private:
int m_m,m_n; //m*n
T** m_data;
public:
Matrix();
Matrix(int m,int n,T** data);//初始化时赋值
//从键盘读入
void setData(int m,int n);
void show();
Matrix operator*(const Matrix<T> &b);
Matrix operator=(const Matrix<T> &b);
};
template <typename T>
Matrix<T> Matrix<T>::operator=(const Matrix<T> &b)
{
Matrix<T> a(b.m_m,b.m_n,b.m_data);
return a;
}
template <typename T>
Matrix<T> Matrix<T>::operator*(const Matrix<T> &b)
{
int m = this->m_m;
int n = b.m_n;
//无法相乘的情况
if(this->m_n != b.m_m)
return Matrix();
T** data = new T*[m];
//计算
for (int i=0;i<m;i++)
{
data[i] = new T[n];
for (int j=0;j<n;j++)
{
data[i][j] = 0;
for(int k = 0;k<this->m_n;k++)
data[i][j] += this->m_data[i][k] * b.m_data[k][j];
}
}
Matrix<T> cc(m,n,data);
//释放空间
for(int i=0;i<m;i++)
delete[] data[i];
delete[] data;
data = 0;
return cc;
}
template <typename T>
void Matrix<T>::show()
{
if(m_data)
{
for (int i =0;i<m_m;i++)
{
for(int j=0;j<m_n;j++)
cout << m_data[i][j] <<" ";
cout <<endl;
}
}
}
template <typename T>
void Matrix<T>::setData(int m,int n)
{
m_m =m;
m_n = n;
if(m_data)
{
for(int i=0;i<m_m;i++)
delete[] m_data[i];
delete[] m_data;
m_data = 0;
}
cout <<"请输入"<<m<<"*"<<n<<"的矩阵:"<<endl;
m_data = new T*[m];
for (int i = 0;i<m;i++)
{
m_data[i] = new T[n];
for(int j=0;j<n;j++)
cin >>m_data[i][j];
}
}
template <typename T>
Matrix<T>::Matrix()
{
m_m = 0;
m_n = 0;
m_data = 0;
}
template <typename T>
Matrix<T>::Matrix(int m,int n,T** data)
{
m_m = m;
m_n = n;
m_data = new T*[m];
for (int i = 0;i<m;i++)
{
m_data[i] = new T[n];
for(int j=0;j<n;j++)
m_data[i][j] = data[i][j];
}
}
int main()
{
int m,n;
cout <<"请输入第一个矩阵的m和n:";
cin >>m>>n;
cout << "请输入"<<m<<"*"<<n<<"的整数矩阵:"<<endl;
int** data = new int*[m];
for(int i = 0;i<m;i++)
{
data[i] = new int[n];
for(int j=0;j<n;j++)
cin >> data[i][j];
}
Matrix<int> ma(m,n,data);
for (int i=0;i<m;i++)
{
delete[] data[i];
data[i]=0;
}
delete[] data;
//ma.show();
//构建第二个矩阵
cout << "请输入第二个矩阵的m和n:";
cin >>m>>n;
cout << "请输入"<<m<<"*"<<n<<"的整数矩阵:"<<endl;
data = new int*[m];
for(int i = 0;i<m;i++)
{
data[i] = new int[n];
for(int j=0;j<n;j++)
cin >> data[i][j];
}
Matrix<int> mb(m,n,data);
for (int i=0;i<m;i++)
{
delete[] data[i];
data[i]=0;
}
delete[] data;
//mb.show();
Matrix<int> c = ma*mb;
c.show();
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!