?? 11_3.cpp
字號:
#include<iostream.h>
class matrix
{
public:
matrix(int r=2,int c=2);
matrix(matrix &m);
~matrix();
void set(void);
matrix operator =(matrix &m);
matrix operator +(matrix &m);//矩陣加法
matrix operator -(matrix &m);//矩陣減法
matrix operator *(matrix &m);//矩陣乘法
double operator ()(int x,int y);
friend ostream& operator <<(ostream& out,matrix &m);
private:
int row;
int col;
double **p;
};
matrix::matrix(int r,int c)
{
int i;
row=r;
col=c;
p=new double*[row];
for(i=0;i<row;i++)
*(p+i)=new double[col];
}
matrix::matrix(matrix &m)
{
int i,j;
row=m.row;
col=m.col;
p=new double*[row];
for(i=0;i<row;i++)
*(p+i)=new double[col];
for(i=0;i<row;i++)
for(j=0;j<col;j++)
*(*(p+i)+j)=*(*(m.p+i)+j);
}
matrix::~matrix()
{
int i;
for(i=0;i<row;i++)
delete []*(p+i);
delete[]p;
}
void matrix::set(void)
{
int i,j;
cout<<"請輸入矩陣元素:"<<endl;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
cin>>*(*(p+i)+j);
}
matrix matrix::operator =(matrix &m)
{
int i,j;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
*(*(p+i)+j)=*(*(m.p+i)+j);
return(*this);
}
matrix matrix:: operator +(matrix &m)
{
int i,j;
matrix a(row,col);
if(row!=m.row||col!=m.col)
throw 0;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
*(*(a.p+i)+j)=*(*(p+i)+j)+*(*(m.p+i)+j);
return(a);
}
matrix matrix::operator -(matrix &m)
{
int i,j;
matrix a(row,col);
if(row!=m.row||col!=m.col)
throw 0;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
*(*(a.p+i)+j)=*(*(p+i)+j)-*(*(m.p+i)+j);
return(a);
}
matrix matrix::operator *(matrix &m)
{
if(col!=m.row)//相乘時,矩陣尺寸不匹配
throw 0;//拋出異常
int i,j,k;
double sum;
matrix a(row,m.col);
for(i=0;i<row;i++)
for(j=0;j<m.col;j++)
{
for(k=0,sum=0;k<col;k++)
sum=sum+*(*(p+i)+k)**(*(m.p+k)+j);
*(*(a.p+i)+j)=sum;
}
return(a);
}
double matrix::operator ()(int x,int y)
{
if(x>row||y>col)//下標越界
throw 0.0;//拋出異常
return(*(*(p+x-1)+y-1));
}
ostream& operator <<(ostream& out,matrix &m)
{
int i,j;
for(i=0;i<m.row;i++)
{
for(j=0;j<m.col;j++)
out<<*(*(m.p+i)+j)<<" ";
out<<endl;
}
return(out);
}
int main()
{
matrix a(2,3),b(2,3),c(3,2),d(2,3),e(2,3),f(2,2);
a.set();
b.set();
c.set();
try
{
d=a+b;
e=a-b;
f=a*c;
}
catch(int)
{
cout<<"矩陣尺寸不匹配!"<<endl;
}
catch(double)
{
cout<<"矩陣下標越界!"<<endl;
}
cout<<"矩陣之和d:"<<endl;
cout<<d;
cout<<"矩陣之差e:"<<endl;
cout<<e;
cout<<"矩陣之積f:"<<endl;
cout<<f;
cout<<"各個矩陣元素的值:"<<endl;
cout<<"d(2,3)="<<d(2,3)<<endl;
cout<<"e(1,1)="<<e(1,1)<<endl;
cout<<"f(2,2)="<<f(2,2)<<endl;
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -