我试图实现运算符重载以连接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;
}
我尝试了很多修改但没有成功。我在网上找到的所有解决方案都基于内置的字符串函数。
答案 0 :(得分:3)
嗯,立即突出的事情是:
name
成员没有明确的所有权 - 在您的情况下,您将其设置为一些字符串文字,但如果您使用new
分配它会怎么样?谁负责破坏呢?谁是主人?operator+
返回指向str
的指针,而不是str
,因此str3 = str1+str2;
无效。str obj3;
从未对其成员进行初始化,但您尝试在其中写入,这是未定义的行为。