c++ - C++运算符重载[],要赋值的数据参数在哪里?
问题描述
我想在我的类中添加运算符 [] 的重载。运算符重载不是我以前必须做的事情。
我想编写一个实现来执行以下操作:
myclass a;
a["test"] = 123;
int test = a["test"];
到目前为止,在我的课堂上,原型看起来是这样的:
string operator[](const char* cpszLabel);
实现不完整,如下所示:
string myclass::operator[](const char* cpszLabel) {
string strContent;
if ( cpszLabel != nullptr ) {
}
return strContent;
}
我不确定如何引用正在分配的数据,或者这是否也需要重载“=”?
我为 '=' 运算符添加了重载,但这不会被调用:
原型:
string operator=(int intData);
执行:
string myclass::operator=(int intData) {
char szString[24];
sprintf(szString, "\"%d\"", intData);
return string(szString);
}
解决方案
您需要安排事情,以便operator[](const char* cpszLabel)
返回对您班级中某些内容的引用。
int& operator[](const char* cpszLabel);
可能是一个更好的原型。
然后,您可以通过该参考修改您班级中的“某事”。老实说,虽然你想要的可以实现
typedef std::map<std::string, int> myclass;
而且大多数人都不关心typedef
,尤其是现在我们有了auto
。如果您想std::map
在类中使用 a 作为成员变量(以减少功能 &c.),那么以下是一个起点:
class myclass
{
std::map<std::string, int> m_data;
public:
int& operator[](const char* cpszLabel)
{
return m_data[cpszLabel];
}
};
推荐阅读
- hive - Impala 中不兼容的镶木地板类型
- c++ - 如何在未选择的选项卡中的 QTabWidget 中绘制 Qt 小部件?
- python - 在python中捕获部分pdf文件
- python - 使用说明符和字典推导更新字典时的字符串格式
- android - 自动重置权限如何在 Android 11 中与设备管理员一起使用?
- java - 默认设置 Bukkit 配置文件的文本 (PaperMc 1.15)
- c# - 我怎样才能平稳地缓慢移动 Canvas Child?
- python - 如何在python中获得两个列表的所有可能组合
- python - 如何创建使用 python 脚本的 Jenkins 共享库?
- php - AWS Application Load Balancer 无法通过 Apache/MySQL DB 处理登录表单请求