C++简单矩阵类

来源:互联网 发布:mac怎么取消双系统 编辑:程序博客网 时间:2024/06/06 23:16
#include <iostream>using namespace std;template<typename T>class Matrix {private:T** m;int r, c;public:Matrix(); //无参构造函数;Matrix(int a, int b); //有参构造函数,矩阵行列Matrix(T *t[], int a, int b); //有参构造函数,复制另一个矩阵;Matrix(const Matrix<T>& s); //复制构造函数;void show(); //打印矩阵~Matrix(); //析构函数;};template<typename T>Matrix<T>::Matrix() {cout<<"调用无参构造函数"<<endl;}template<typename T>Matrix<T>::Matrix(int a, int b) :r(a), c(b) { //有参构造函数,矩阵行列cout<<"调用有参构造函数创建矩阵"<<endl;m = new T*[a];//data = new double*[m];int i,j;for(i=0;i<a;i++) {m[i] = new T[b];for(j=0;j<b;j++) {m[i][j]=0;}}}template<typename T>Matrix<T>::Matrix(T *t[], int a, int b) :r(a), c(b) { //有参构造函数,复制另一个矩阵;cout<<"调用有参构造函数复制矩阵"<<endl;m = new T*[a];int k;for(k=0;k<a;k++)m[k]=t[k];int i, j;for (i = 0; i < a; i++) {for (j = 0; j < b; j++) {m[i][j] = t[i][j];}}}template<typename T>Matrix<T>::Matrix(const Matrix<T>& s) { //复制构造函数cout<<"调用复制构造函数"<<endl;r = s.r;c = s.c;m = new T*[r];int i, j;for (i = 0; i < r; i++) {m[i] = s.m[i];for (j = 0; j < c; j++) {m[i][j] = s.m[i][j];}}}template<typename T>Matrix<T>::~Matrix() {cout<<"调用析构函数"<<endl;int i;for (i = 0; i < r; i++)delete[] m[i];}template<typename T>void Matrix<T>::show() {int i, j;for (i = 0; i < r; i++) {for (j = 0; j < c; j++) {cout<<m[i][j]<<",";}cout<<endl;}}int main() {Matrix<int> a(3,4);  //创建一个3行4列的矩阵a.show();Matrix<double> b;    //无参构造函数double q[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };double *p[3];int i;for(i=0;i<3;i++)p[i]=q[i];Matrix<double> c(p,3,3);//复制另外一个矩阵c.show();Matrix<double> d(c);//调用拷贝构造函数d.show();return 0;}

原创粉丝点击