class mystring {
private:
string s;
public:
mystring(string ss) {
cout << "mystring : mystring() : " + s <<endl;
s = ss;
}
/*! mystring& operator=(const string ss) {
cout << "mystring : mystring& operator=(string) : " + s <<endl;
s = ss;
//! return this;
return (mystring&)this; // why COMPILE ERROR
} */
mystring operator=(const string ss) {
cout << "mystring : mystring operator=(string) : " + s <<endl;
s = ss;
return *this;
}
mystring operator=(const char ss[]) {
cout << "mystring : mystring operator=(char[]) : " << ss <<endl;
s = ss;
return *this;
}
};
mystring str1 = "abc"; // why COMPILE ERROR
mystring *str2 = new mystring("bcd");
所以问题是
如何制作正确的mystring&amp; opeartor = overload?也就是说,我怎么能返回引用而不是指针?(我们可以在C ++中的引用和指针之间转换吗?)
如何制作正确的mystring operator = overload?我认为源代码可以正常工作,但事实证明我仍然无法将const char []分配给mystring,就像我没有重载operator =
感谢。
答案 0 :(得分:5)
您需要的是一个“转化”构造函数,它采用const char*
:
mystring( char const* ss) {
cout << "mystring : mystring(char*) ctor : " << ss <<endl;
s = ss;
}
您遇到问题的行:
mystring str1 = "abc"; // why COMPILE ERROR
不是真正的作业 - 它是初始化者。
答案 1 :(得分:3)
mystring& operator=(const string &ss)
{
cout << "mystring : mystring operator=(string) : " + s <<endl;
s = ss;
return *this; // return the reference to LHS object.
}
答案 2 :(得分:0)
正如其他人所指出的那样,"string"
有const char *
类型,你应该重载赋值运算符。
mystring& operator=(const char * s);
要从指针*this
获取引用就足够了,不需要进行任何操作。
答案 3 :(得分:0)
mystring& operator=(const string& ss) {
cout << "mystring : mystring operator=(string) : " << s << endl;
s = ss;
return *this;
}
mystring& operator=(const char* const pStr) {
cout << "mystring : mystring operator=(zzzz) : " << pStr << endl;
s = pStr;
return *this;
}