运算符重载以连接字符串

时间:2013-03-10 17:50:29

标签: c++ visual-c++

我试图实现运算符重载以连接2个字符串但不使用内置字符串函数和使用指针。代码如下:

#include<iostream>
using namespace std;
class str
{
    public:
    char* name;
    str* operator+(str obj)
    {
        str obj3;
        while(*name)
        {
            obj3.name = name++;
            obj3.name++;
        }
        while(*obj.name)
        {
            obj3.name = obj.name++;
            obj3.name++;
        }
        *(obj3.name) = '\0';
        return &obj3;
    }
};

int main()
{
    str str1,str2;
    str* str3;
    str1.name = "hello";
    str2.name = " there!";
    str3 = str1+str2;
    cout<<"the output is: "<<str3.name;
    return 0;
}

我尝试了很多修改但没有成功。我在网上找到的所有解决方案都基于内置的字符串函数。

1 个答案:

答案 0 :(得分:3)

嗯,立即突出的事情是:

  • name成员没有明确的所有权 - 在您的情况下,您将其设置为一些字符串文字,但如果您使用new分配它会怎么样?谁负责破坏呢?谁是主人?
  • operator+返回指向str的指针,而不是str,因此str3 = str1+str2;无效。
  • str obj3;从未对其成员进行初始化,但您尝试在其中写入,这是未定义的行为。
  • 按值传递将创建副本,如果您不遵守三条规则,这将是不好的 - 在这种情况下,如果您需要,甚至不清楚。