我正在学习c ++,我试着知道在调用operator =
之后是否可以使用赋值[]
运算符
我有一个包含私有int *_content
数据的数组类,并且运算符=
已重载。
他的构造函数按照传入参数的大小来分配我的_content
。
我的班级看起来像:
class Array {
private:
int *_content;
public:
Array(unsigned int n) {
this->_content = new int[n];
}
~Array() {
delete[] _content;
}
int operator[](int n) const {
return this->_content[n];
}
};
我可以写下面的代码:
int main() {
Array a(10);
std::cout << a[5] << std::endl;
return 0;
}
结果:
0
我想知道在使用n
之后,是否有可能由任何运营商分配我的内容[]
:
a[5] = 2000;
并且知道在我的情况下是否有任何干净的解决方案。 谢谢你的回复
答案 0 :(得分:5)
是的,要做到这一点,您需要提供一个[]
版本,它将引用返回到容器中的元素:
int& operator[](int n) {
return this->_content[n];
}
然后,您可以通过该引用修改数组元素,并使用您在调用站点提出的确切语法。
其他事项:您还需要定义赋值运算符和复制构造函数。我们称之为“三个规则”。见What is The Rule of Three?。并且可能想到捕获在构造上传递的容器的大小。然后,您可以检查传递给n
重载的[]
是否在支持数组的范围内。
答案 1 :(得分:4)
至少你可以通过以下方式重载operator []
const int & operator[]( size_t n) const
{
return this->_content[n];
}
int & operator[]( size_t n)
{
return this->_content[n];
}
答案 2 :(得分:1)
让operator[]
返回引用,然后您可以指定返回的值:
int& operator[](int n) {
return this->_content[n];
}
然后你可以写
a[5] = 100;
答案 3 :(得分:0)
当然,它可能,只需让operator []返回int&
```
int& operator[](int n) const {
return this->_content[n];
}
```
然后
int main() {
Array a(10);
a[5]=1;
std::cout << a[5] << std::endl;
return 0;
}