#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;
}
C++简单矩阵类
最新推荐文章于 2022-07-28 18:06:30 发布