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

时间:2009-12-24 04:49:34

标签: 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");

所以问题是

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

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

  3. 感谢。

4 个答案:

答案 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;
 }
  • 我添加'&amp;'你的字符串所以它 返回对'this'的引用而不是 它的副本(这是一个很好的做法 也为输入参数执行此操作 因为你不是没有成功的 输入字符串的副本),
  • 我将'+'换成了'&lt;&lt;'在第2行
  • 我将你的数组改为了 const char const * pointer