C++矩阵处理类如何实现接收两个矩阵并获取其行列数的方法
解决方案
实现思路
- 你的
matrixClass每个实例本身已经通过CreateMat方法给成员变量m_nRows(行数)、m_nCol(列数)赋值,因此只要传入两个matrixClass实例的引用,就能直接读取各自的行列属性 - 方法可以设计为类的静态成员,避免依赖当前实例的状态,也可以根据后续需求(比如矩阵运算)设计为普通成员方法
步骤1:在matrixClass类中添加方法声明
template<typename T> class matrixClass { private: unsigned int m_nRows; unsigned int m_nCol; T* matrix; public: // 你原有已实现的CreateMat方法 T* CreateMat(unsigned int nRow, unsigned int nCol, T& num); // 新增:获取两个矩阵行列信息的静态方法 static void GetTwoMatSize(const matrixClass<T>& mat1, const matrixClass<T>& mat2, unsigned int& mat1Row, unsigned int& mat1Col, unsigned int& mat2Row, unsigned int& mat2Col); };
步骤2:类外实现该方法
template<typename T> void matrixClass<T>::GetTwoMatSize(const matrixClass<T>& mat1, const matrixClass<T>& mat2, unsigned int& mat1Row, unsigned int& mat1Col, unsigned int& mat2Row, unsigned int& mat2Col) { // 直接读取两个实例的私有成员变量获取行列数 mat1Row = mat1.m_nRows; mat1Col = mat1.m_nCol; mat2Row = mat2.m_nRows; mat2Col = mat2.m_nCol; // 若要扩展矩阵运算逻辑(比如判断是否可相乘、可相加)可直接在此处补充 }
使用示例
int main() { matrixClass<double> mat1, mat2; double initNum = 0; mat1.CreateMat(3,4,initNum); initNum = 10; mat2.CreateMat(4,5,initNum); unsigned int r1,c1,r2,c2; matrixClass<double>::GetTwoMatSize(mat1, mat2, r1, c1, r2, c2); // 执行后r1=3、c1=4、r2=4、c2=5 return 0; }
补充说明
如果后续这个方法要扩展为矩阵运算方法(比如矩阵加法、乘法),可以去掉static修饰,直接用当前实例作为第一个运算矩阵,只需要传入第二个矩阵参数即可。
内容的提问来源于stack exchange,提问作者Πάνος Ρεβολίδης
相关产品推荐
相关产品推荐

