Присвоение строки экземпляру класса (перегрузка =)? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть класс с одним членом типа string.Я хотел бы спросить, как я могу использовать оператор =, чтобы назначить строку для недавно созданного объекта данного класса.Я пытался определить функцию оператора, но безрезультатно?

class strtype {
    string str;
public:
    strtype() {
        str = "Test";
    }
    strtype(string ss) {
        str = ss;
    }
    strtype operator= (strtype &st) {
            strtype tmp;
            tmp.str = st.str;
            return tmp;
        }
};

int main(){
//how can i do the following:
strtype b = "example";
}

1 Ответ

0 голосов
/ 03 октября 2018

Ваш operator= реализован неправильно.Не то, чтобы это имело значение в вашем примере, потому что strtype b = "example"; не вызывает operator= для начала, вместо этого он вызывает конструктор strtype(string) (strtype b = "example"; - это просто синтаксический сахар для strtype b("example");).

Попробуйте вместо этого:

class strtype {
    string str;
public:
    strtype() {
        cout << "strtype()" << endl;
        str = "Test";
    }

    strtype(const strtype &st) { // <-- add this!
        cout << "strtype(const strtype &)" << endl;
        str = st.str;
    }

    strtype(const string &ss) {
        cout << "strtype(const string &)" << endl;
        str = ss;
    }

    strtype(const char *ss) { // <-- add this!
        cout << "strtype(const char *)" << endl;
        str = ss;
    }

    strtype& operator=(const strtype &st) { // <-- change this!
        cout << "operator=(const strtype &)" << endl;
        str = st.str;
        return *this;
    }

    string get_str() const { return str; };
};

int main()
{
    strtype b = "example";
    cout << b.get_str() << endl;

    b = "something else";
    cout << b.get_str() << endl;
}

Вот вывод:

strtype(const char *)
example
strtype(const char *)
operator=(const strtype &)
something else

Live Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...