主题:运算符的重载错误
djy5043
[专家分:0] 发布于 2008-04-30 21:29:00
有几个编译错误实在看不明白
回复列表 (共5个回复)
沙发
菠萝渣渣 [专家分:270] 发布于 2008-05-01 12:15:00
什么错误啊?
板凳
djy5043 [专家分:0] 发布于 2008-05-02 10:47:00
/*用运算符的重载写矩阵的输入输出,加法,减法,乘法
用rows,cols存放行列序号,并用new动态创建float型数组,用于存储矩阵中各元素的值,并重载()读出矩阵指定位置的值*/
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class matrix{
private:
int rows;
int cols;
float* temp;
public:
matrix(int a,int b):rows(a),cols(b)
{temp=new float[8][8];} //这一步老出错
void inputm()
{
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
cin>>*(*(temp+i)+j);
}
/*
istream& operator>>(istream&in,matrix & m)
{
for(int i=0;i<rows;i++)
for(j=0;j<cols;j++)
cin>>*(*(temp+i)+j);
}
*/
float operator()(int r,int c) //重载(),很重要
{
return *(*(temp+r)+c);
}
//--------------------------------------以下是友元函数,并非这个类的公有函数--------------------------------------
friend matrix& operator+(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.rows==m2.rows&&m1.cols==m2.cols)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m1.cols;j++)
m3(i,j)=m1(i,j)+m2(i,j);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend matrix& operator-(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.rows==m2.rows&&m1.cols==m2.cols)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m1.cols;j++)
m3(i,j)=m1(i,j)-m2(i,j);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend matrix& operator*(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.cols==m2.rows)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m2.cols;j++)
m3(i,j)=m1(i,j)*m2(j,i);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend ostream& operator<<(ostream&out,matrix& m)
{
for(int i=0;i<m.rows;i++)
{
for(int j=0;j<m.cols;j++)
cout<<setw(9)<<m(i,j);
cout<<endl;
}
}
};
void main()
{
matrix A(2,3),B(2,3),C(3,2);
A.inputm();
B.inputm();
C.inputm();
/*cin>>A(2,3);
cin>>B(2,3);
cin>>C(3,2);*/
cout<<"A+B="<<A+B;
cout<<"A-B="<<A-B;
cout<<"A*B="<<A*B;
cout<<A+C;
}
3 楼
vfdff [专家分:740] 发布于 2008-05-02 14:57:00
new 只能申请一维的
二维数组不能止痒直接的
4 楼
zzz822163 [专家分:140] 发布于 2008-05-02 17:26:00
楼上说的对,二维数组要用二维指针的
float**temp;
temp=new float*[rows];
for(int i=0;i<rows;i++)
temp[i]=new float[cols];
释放时
for (int i = 0; i < rows; i++)
delete [] temp[i];
delete [] temp;
5 楼
djy5043 [专家分:0] 发布于 2008-05-05 19:44:00
谢谢
是这样的
这样改了之后就对了
我来回复