[英]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.