簡體   English   中英

返回對struct的引用

[英]Returning reference to struct

使用重載[]運算符,我們可以在容器內設置元素的值。 例如

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數組但結構的向量。 例如

 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; 其中example是類型的Example

語句example[0]是對operator[](unsigned int i)的調用,它返回對one[0]的引用,其類型是對Test的引用。

定義operator[]返回int是完全有效的,並按照上面的方式實現它。 但這非常不直觀; 我當然會發現它非常混亂,因為operator []通常返回容器的元素,而不是容器元素的字段。 最好為其定義一個具有自解釋名稱的單獨函數,例如int& getValue(unsigned int); 對於index字段的value字段和int& getIndex(unsigned int)

#include <vector>

using namespace std;
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;
    }
    int & operator [] (unsigned int i) {
        Test a(0, i);
        _a.push_back(a);
        return _a[i].value;
    }
private:
    vector<Test> _a;
};

int main() {
    Example a;
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM