gpt4 book ai didi

c++ - 运算符 [] 重载

转载 作者:太空狗 更新时间:2023-10-29 20:48:10 24 4
gpt4 key购买 nike

有这样一个类:

class X {
public:
...
private:
int changeable[3];
int unchangeable[3];
};

这是它理想的用法:

X x;
x[0] = 1; // here changeable[0] should be used
a = x[0]; // here unchangeable[0] should be used

有没有办法在 class X 中定义 operator[] 来实现它?

最佳答案

我可能会用代理对象来解决这个问题:

class Xproxy
{
int& changeable;
int& unchangeable;

Xproxy(int& c, int& u) : changeable(c), unchangeable(u)
{}

Xproxy& operator=(int i)
{
changeable=i
return *this
}

operator int()
{
return unchangeable;
}
};


class X
{
int changeable[3];
int unchangeable[3];

Xproxy operator[](int i)
{
return Xproxy(changeable[i], unchangeable[i])
}
};

所以现在当你在 X 上调用 operator[] 时,你会得到一个 Xproxy 对象,它在内部引用了可更改和不可更改的字段。

如果您尝试分配给 Xproxy 对象,它将调用运算符 =,它分配给对可变对象的引用。如果您尝试将 Xproxy 对象分配给一个 int,它会调用从不可更改的字段中提取的强制转换运算符。

关于c++ - 运算符 [] 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3834909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com