首页 > 解决方案 > 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);
    }

标签: c++operator-overloading

解决方案


您需要安排事情,以便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];
    }
};

推荐阅读