使用重载的[]运算符,我们可以在容器内设置元素的值。例如

class Example{
public:
  Example(){
     arr = new int[10];
  }
  int operator [] ( unsigned int i) const{
        return arr[i];
  }
  int & operator [] ( unsigned int i){
        return arr[i];
  }
private:
  int *arr[];
}


所以用

Example a;
a[0] = 0;
a[1] = 1;
a[2] = 2;


我们可以设置元素的值。是否可以用struct做类似的事情?如果我们没有int数组,而是结构的vector。例如

 struct Test{
       int value;
       int index;
       Test( int a , int b){
          value = a;
          index = b;
       }
 }

 class Example{
 public:

       Example(){

       }
       int operator [] ( unsigned int i) const{
          return a[i].value;
       }
       Test & operator [] ( unsigned int i){
          Test a(0, i );
          one.push_back(a);
          return a -> value;
       }
private:
       vector<Test> a;
        }

Example a;
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;


我怎样才能像使用典型的int容器更改/设置值一样更改返回的结构的value属性?

最佳答案

对的,这是可能的。

代码有错误:return a -> value;返回一个int,而函数operator[](unsigned int i)表示它将返回对Test的引用。您可以改为返回one[one.length()-1],以便您说example[0]->value = 1;,其中exampleExample类型的?

语句example[0]是对operator[](unsigned int i)的调用,该调用返回对one[0]的引用,该引用的类型是对Test的引用。

定义operator[]返回一个int并按照上面的方法实现它是完全有效的。但这是非常不直观的。我当然会感到非常困惑,因为operator []通常返回容器的元素,而不是容器的元素的字段。最好用一个不言自明的名称定义一个单独的函数,例如int& getValue(unsigned int);表示value字段,而int& getIndex(unsigned int)表示index字段。

关于c++ - 返回对结构的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36515833/

10-11 22:12
查看更多