C++ 过载+;自己的类和std::string的运算符

C++ 过载+;自己的类和std::string的运算符,c++,C++,如何重载+运算符,以便能够编写如下内容: MyString str("He is"); str = str + " a cat"; MyString: class MyString { public: MyString(); MyString(const char *text); MyString(const MyString &stringToCopy); ~MyString(); MyString& operator=(const

如何重载+运算符,以便能够编写如下内容:

MyString str("He is");
str = str + " a cat";
MyString:

class MyString {
public:
    MyString();
    MyString(const char *text);
    MyString(const  MyString &stringToCopy);
    ~MyString();

    MyString& operator=(const  MyString &otherString); // It works
    MyString& operator=(const char *text); // It works
    MyString& operator+=(const MyString &otherString); // It works
    MyString& operator+=(const char *text); // It works
private:
    char *_chars;
    int _length;
};
我目前的想法(但不可行):

MyString操作符+(MyString和firstString,std::string和text){

std::cout您可以如下声明
运算符+
MyString MyString::operator+(const MyString&strotadd)const;
MyString MyString::operator+(const std::string strotadd)const;

它类似于
+=
操作符,但是您可以创建一个新的
MyString
并返回它,而不是将它附加到
MyString
对象

我个人认为,
operator+
最好是
MyString
的成员,但这也适用于:

MyString operator+ (const MyString& addStr, const std::string addStr2)
{
  MyString str(addStr);
  str += MyString(addStr2);
  return str;
}

它是如何工作的?如果你遇到编译器错误,请复制并粘贴到问题中。我们需要能够提供帮助。
“cat”
虽然不是
std::string
。“但是运算符方法没有调用”:那么您是否遇到编译器错误?如果您没有遇到编译器错误,那么调用哪个重载?请提供完整的。
std::string&text
->
const std::string&text
std::string\u view text
现在返回值有问题:(现在返回值有问题:((编辑中的信息)很抱歉,但一旦您确认无误,我将向上投票:-)另外,解释为什么你认为它应该是一个成员会很好。相反,在我看来,如果某个东西不需要成为成员,那么它可能就不应该成为。我的一个坏习惯是不使用常量修饰符。但是非常感谢你帮助我发展技能。我个人认为它更好,因为我认为它是我的一部分uch asoperator+=和其他运算符是。我将在类MyString中搜索它。
cout << str.toStandard(); // Prints " cat". Without first char
MyString MyString::operator+(const char *text) {
    MyString newString(*this);
    newString.pushText(text);

    cout << "test: " << newString.toStandard() << endl; // Prints correct append

    return newString;
}
cout << (str + "teest").toStandard() << endl; // Not prints
MyString operator+ (const MyString& addStr, const std::string addStr2)
{
  MyString str(addStr);
  str += MyString(addStr2);
  return str;
}