Ваш 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