gpt4 book ai didi

c++ - 重载 += 与 + 相比

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:17 27 4
gpt4 key购买 nike

我需要为 MyString 类重载运算符 + 和 +=。

MyString.h

    class MyString
{
char* m_pStr;
};

主要

    MyString s1("ABC"), s2("kkk");
MyString s("S");//GMV
s1 +=s;
s2 = s+s1;
stop

MyString.cpp

MyString MyString:: operator + (const MyString & rhs){
char * tmp = create_tmp_string(this->m_pStr, rhs.m_pStr);
return MyString(tmp);
};

MyString & MyString:: operator += (const MyString & rhs){
char * tmp = create_tmp_string(this->m_pStr, rhs.m_pStr);
return MyString(tmp);
};

char* MyString:: create_tmp_string(char * one, char * two){
int total_length = strlen(one) + strlen(two);
char * tmp = new char[total_length + 1];
tmp[0] = '\0';
strcat(tmp, one);
strcat(tmp, two);
return tmp;
}

我的问题是:

s2 = s+s1; // Working
s1 +=s; // Not working.

嗯,当我一步步执行代码时:

MyString & MyString:: operator += (const MyString & rhs){
char * tmp = create_tmp_string(this->m_pStr, rhs.m_pStr);
return MyString(tmp);
};

tmp 原来是SABC。但是 s1 将不包含 SABC 并且仍然持有 ABC。

你能帮帮我吗?

最佳答案

这个

MyString & MyString:: operator += (const MyString & rhs){
char * tmp = create_tmp_string(this->m_pStr, rhs.m_pStr);
return MyString(tmp);
};

应该是这样的

MyString & MyString:: operator += (const MyString & rhs){
char * tmp = create_tmp_string(this->m_pStr, rhs.m_pStr);
*this = MyString(tmp);
return *this;
};

假设您的 operator= 工作正常。

但确实有更简单的方法来做到这一点。只需根据另一个来编写一个运算符,例如使用 operator += 编写 operator+

MyString operator+(const MyString& x, const MyString& y)
{
MyString res = x;
res += y;
return res;
}

或者你可以反过来做

MyString& MyString::operator+=(const MyString& x)
{
*this = *this + x;
return *this;
}

关于c++ - 重载 += 与 + 相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com