重载下标操作符
Overloading subscript operator
我有一个示例Map类,我试图覆盖下标操作符。允许类的用户读取和写入Map。Map["a"]为读,Map["a"]="某物"为类的写。然而,我不知道如何使用赋值操作符,并允许传入值来替换它。现在,如果我尝试分配一个新值它只会读取"segmentation fault"
到目前为止我写的是:
VALUE_TYPE& Map::operator[](KEY_TYPE a){
cout << "hmm" << endl;
}
Map& Map::operator=(const Map &rhs){
//cout << "operator = " << endl;
}
现在我没有任何代码…只是想看看他们会被成功调用。
我似乎不明白的是,如果我做了诸如
Map["a"] = "hey";
我将得到一个分割错误。我假设当我想为一个特定的键分配一个新值时,将调用赋值操作符=。我做错了什么吗?
顺便说一下,VALUE_TYPE和KEY_TYPE只是定义为字符串,每个键都有一个与之关联的值
你不是在给map赋值,而是给operator[]
返回的对象赋值。
(在m["a"] = "hey";
中,m["a"]
不是Map
,而是VALUE_TYPE&
)
操作符需要返回对有效对象的引用,否则行为未定义。
我能想到的最小的例子:
struct Mapp
{
int& operator[](int i) { return member; }
int member;
};
int main()
{
Mapp m;
m[0] = 12; // Assigns 12 to m.member
}
还需要重载const版本的操作符
相关文章:
- 下标操作符重载以访问私有数组
- 通过重载下标操作符()从矩阵中获取向量
- 重载c++下标[]操作符,可以使用长int索引
- 下标操作符重载:返回引用问题
- 矩阵上的数组下标操作符
- 用于部分模板特化的下标操作符重载
- 重载下标操作符
- c++ std::map::iterator一无所获,但下标操作符返回对映射值的引用
- 在模板双链表类中重载下标操作符
- 在使用c++类的下标操作符传递的数组中使用关系操作符
- 通过不返回引用来防止下标操作符的赋值会导致运行时崩溃
- 重载c++中的下标[]操作符来设置类(量词)的大小
- 如何重载下标操作符以允许RPG字符数组
- 重载数组下标操作符
- 在2D数组中通过重载数组下标操作符进行访问
- 如何重载具有读写功能的下标操作符
- 为什么下标操作符在c++中经常成对出现
- c++两个版本的重载下标操作符
- Boost c++ Phoenix用户定义参数的下标操作符[]错误
- 如何检查下标操作符是否存在