std :: string如何重载赋值运算符?

Jic*_*hao 0 c++ string operator-overloading stdstring

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");
Run Code Online (Sandbox Code Playgroud)

所以问题是

  1. 如何创建一个正确的mystring&opeartor = overload?也就是说,我怎么能返回一个引用而不是一个指针?(我们可以在C++中的引用和指针之间转换吗?)

  2. 如何制作一个正确的mystring operator = overload?我认为源代码可以正常工作,但事实证明我仍然无法将const char []分配给mystring,就好像我没有重载operator =.

谢谢.

Mic*_*urr 5

你需要的是一个'转换'构造函数,它采用const char*:

mystring( char const* ss) {
  cout << "mystring : mystring(char*) ctor : " << ss <<endl;
  s = ss;
}
Run Code Online (Sandbox Code Playgroud)

你遇到问题的那条线:

mystring str1 =  "abc"; // why COMPILE ERROR
Run Code Online (Sandbox Code Playgroud)

这不是一个真正的任务 - 它是一个初始化者.