public:
Vector(int);
~Vector(){delete[] v;}
Vector(Vector &);
int Size(){return sz;}
void Display();
int & Elem(int);
protected:
int* v;
int sz;
}
class Matrix{
public:
Matrix(int,int);
Matrix(Matrix &);
~Matrix(){delete[] m;}
int SizeL(){return szl;}
int SizeR(){return szr;}
int& Elem(int,int);
protected:
int *m;
int szl;
int szr;
}
int& Matrix::Elem(int i,int j){
if(i<0||szl<=i||j<0||szr<=j){
cerr<<"Matrix index out of range.\n";
exit(1);
}
return m[i*szr+j];
}
int& Vector::Elem(int i){
if(i<0||sz<=i){
cerr<<"Vector index out of range.\n";
exit(1);
}
return v[i];
}
void main(){
Matrix ma(4,3);
ma.Elem(0,0)=1;
ma.Elem(0,1)=2;
//...............
ma.Elem(3,2)=1;
Vector ve(3);
ve.Elem(0)=2;
ve.Elem(1)=1;
ve.Elem(2)=0;
}
在这段代码中ma.Elem(0,0)=1这行中,ma.Elem(0,0)将返回一个int&,为什么等号后边写1,这行代码怎么理解?是什么意思?
ve.Elem(0)=2这行怎么理解?是什么意思?起什么作用?
3 个解决方案
#1
返回int&,就可以对其进行读写操作
如果只是返回int,那么只能读取值
ve.Elem(0)=2;等价与ve.v[0]=2;
如果只是返回int,那么只能读取值
ve.Elem(0)=2;等价与ve.v[0]=2;
#2
楼上说的是对的。
#3
因为你无法重载[][],所以用Elem(0,0)来代替对一个二维数组的访问,由于返回的是个引用,即可以认为是成员变量本身,所以Elem(0,0)起的作用就是给数组赋值
ve.Elem(0)=2道理一样
ve.Elem(0)=2道理一样
#1
返回int&,就可以对其进行读写操作
如果只是返回int,那么只能读取值
ve.Elem(0)=2;等价与ve.v[0]=2;
如果只是返回int,那么只能读取值
ve.Elem(0)=2;等价与ve.v[0]=2;
#2
楼上说的是对的。
#3
因为你无法重载[][],所以用Elem(0,0)来代替对一个二维数组的访问,由于返回的是个引用,即可以认为是成员变量本身,所以Elem(0,0)起的作用就是给数组赋值
ve.Elem(0)=2道理一样
ve.Elem(0)=2道理一样