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;
}