本菜写了一个小程序
能够创建一个矩阵,规定长宽,并进行矩阵之间的加减运算
代码如下
#include<iostream>
using namespace std;
class matrix //创建矩阵类
{
private:
int lines;
int rows;
int **num; //建立二重数组
public:
matrix(int a,int b) //构造函数
{
lines=a;
rows=b;
cout<<"矩阵初始化"<<endl;
num=new int*[lines];
int x,y;
for(y=0;y<lines;y++)
{
num[y]=new int[rows]; //循环完成new申请内存
}
}
/*matrix(matrix& father) //拷贝构造函数
{
cout<<"调用拷贝构造函数"<<endl;
lines=father.lines;
rows=father.rows;
int x,y;
for(y=0;y<lines;y++)
{
for(x=0;x<rows;x++)
{
num[x][y]=father.num[x][y]; //循环读入矩阵元素
}
}
}*/
void in(); //输入函数
void out(); //输出函数
int get_num(int x,int y) //取用指定元素的函数(内联)
{
return num[x][y];
}
void operate(int mode,matrix m1,matrix m2); //运算函数,包含加和减
~matrix() //析构函数 释放矩阵空间
{
}
void matrix_free(); //释放矩阵空间函数
};
void matrix::matrix_free()
{
int i;
for(i=0;i<lines;i++)
{
delete []num[i];
}
delete []num;
}
void matrix::in()
{
cout<<"请按顺序输入矩阵元素:"<<endl;
int x,y;
for(y=0;y<lines;y++)
{
for(x=0;x<rows;x++)
{
cin>>num[x][y]; //循环输入矩阵元素
}
}
}
void matrix::out() //此函数可以按格式输出矩阵
{
int x,y;
for(y=0;y<lines;y++)
{
for(x=0;x<rows;x++)
{
cout<<num[x][y];
if(x!=rows-1)
{
cout<<" ";
}
}
cout<<endl;
}
}
void matrix::operate(int mode,matrix m1,matrix m2) //运算函数,mode=1代表加,mode=-1代表减,m1,m2为待处理矩阵
{
int x,y;
for(y=0;y<lines;y++)
{
for(x=0;x<rows;x++)
{
num[x][y]=m1.get_num(x,y)+mode*m2.get_num(x,y); //运算部分
}
}
}
int main(void)
{
int a=0,b=0;
cout<<"输入矩阵大小(行 列):"<<endl;
while(a<=0||b<=0)
{
cin>>a>>b;
if(a<=0||b<=0)
{
cout<<"输入错误,重新输入:"<<endl;
}
}
matrix A1(a,b),A2(a,b),A3(a,b); //创建三个矩阵
A1.in(); //输入初始化
A2.in();
A3.operate(1,A1,A2); //A3=A1+A2
cout<<"矩阵和:"<<endl;
A3.out(); //输出
A3.operate(-1,A1,A2); //A3=A1-A2
cout<<"矩阵差:"<<endl;
A3.out(); //输出
A1.matrix_free(); //释放矩阵空间
A2.matrix_free();
A3.matrix_free();
}
此程序目前问题有三个
1.拷贝构造函数出错,只能注释掉,否则输入完两个矩阵后回车程序未响应
2.释放矩阵空间的不能写在析构函数里,否则输出结果不正确(A3=A1-A2的最后一行)
3.输入矩阵的列不能大于行,否则输入完第一行数字并回车后程序未响应
请前辈指导,谢谢