返回对结构的引用
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;
我们可以设置元素的值。是否可以用结构做这样的事情?如果我们没有 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;
如何更改返回结构的 value 属性,就像使用典型的 int 容器更改/设置值一样?
是的,这是可能的。
代码有一个错误: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 并按照上面的方式实现它是完全有效的。但这非常不直观;我肯定会发现它非常令人困惑,因为运算符 [] 通常返回容器的元素,而不是容器元素的字段。最好定义一个单独的函数,并为其定义一个不言自明的名称,例如int& getValue(unsigned int);
用于value
字段,int& getIndex(unsigned int)
用于index
字段。
#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;
}
相关文章:
- 使用对const结构的const数组的引用进行构造
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 如何传递带有通过引用传递的结构参数的函数?
- 具有引用成员的结构是否具有唯一的对象表示形式
- 在结构中使用 switch 引用结构中的数据C++
- 复制引用结构上的赋值
- 取消引用结构以获取第一个成员的值
- 如何引用结构字符串成员
- 引用结构/C++中的变量
- 为什么在取消引用结构后结构成员未初始化
- 引用结构的c++类构造函数
- 引用结构中的另一个结构,其中第二个结构也引用第一个结构
- 结构并集的去引用结构
- 从用户输入中删除引用结构/类成员变量
- 引用结构中的值
- Boost Fusion适应模板化自引用结构的声明
- 引用结构中成员的另一种方法
- C++取消引用结构指针
- 引用结构内部的枚举
- C++引用结构数组