一个问题我不明白,请大家帮忙解答!

时间:2022-01-10 20:34:56
class Vector{
      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;

#2


楼上说的是对的。

#3


因为你无法重载[][],所以用Elem(0,0)来代替对一个二维数组的访问,由于返回的是个引用,即可以认为是成员变量本身,所以Elem(0,0)起的作用就是给数组赋值
ve.Elem(0)=2道理一样

#1


返回int&,就可以对其进行读写操作
如果只是返回int,那么只能读取值

ve.Elem(0)=2;等价与ve.v[0]=2;

#2


楼上说的是对的。

#3


因为你无法重载[][],所以用Elem(0,0)来代替对一个二维数组的访问,由于返回的是个引用,即可以认为是成员变量本身,所以Elem(0,0)起的作用就是给数组赋值
ve.Elem(0)=2道理一样