关键在于他有很多要求,不在于乘法的实现,要用类来封装矩阵,还要用模板,初学者感觉困难,求思路,最好有代码,谢
2条回答 默认 最新
- 技术专家团-小桥流水 2022-03-31 23:05关注
找找模板封装的例子看看,只是用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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 java 的protected权限 ,问题在注释里
- ¥15 这个是哪里有问题啊?