Оператор C ++ перегрузки [], где параметр данных для назначения?

Обновить

April 2019

Просмотры

27 раз

0

Я хочу, чтобы добавить перегрузки оператора [] в моем классе. Перегрузка операторов не то, что я должен был сделать раньше.

Я хочу написать реализацию, чтобы сделать следующее:

    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);
    }

1 ответы

0

You need to arrange things so operator[](const char* cpszLabel) returns a reference to something in your class.

int& operator[](const char* cpszLabel);

is probably a better prototype.

You can then modify that "something" in your class via that reference. To be honest though what you want can be achieved with

typedef std::map<std::string, int> myclass;

and most folk don't bother with the typedef, especially now that we have auto. If you want to use a std::map as a member variable in the class (in order to reduce functionality &c.), then the following is a starting point:

class myclass
{
    std::map<std::string, int> m_data;
public:
    int& operator[](const char* cpszLabel)
    {
        return m_data[cpszLabel];
    }
};