C++:定义一个String类存放字符串,重载运算符“+”,实现两个字符串的连接

下面是我的代码,可是运行不出相加后的字符串结果,编译和连接都没错误,不知道问题出在哪,哪位高手帮忙看下?
String.h文件:
class String
{
public:
String(){p=NULL;}
String(char *str);
friend String operator + (String &string1,String &string2);
void display();
~String()
{delete []p;}
private:
char *p;
int len;
};
String.cpp文件:
#include<iostream.h>
#include<string.h>
#include"String.h"

String::String(char *str)
{p=str;}

void String::display()
{cout<<p<<'\n';}

String operator + (String &string1,String &string2)
{
String string3;
string3.len=string1.len+string2.len;
string3.p=new char [string3.len+1];
strcpy(string3.p,string1.p);
strcat(string3.p,string2.p);
return string3;
}
main.cpp文件:
#include<iostream.h>
#include<string.h>
#include"String.h"

int main()
{
String s1("Hello"),s2("World"),s3;
s1.display();
s2.display();
s3=s1+s2;
s3.display();

return 0;
}

第1个回答  2010-10-23
s3=s1+s2;
这句代码会调用String类的 operator =操作符。你没定义,用的是默认的,不是深拷贝,string3已经析构
第2个回答  2010-10-23
构造函数有问题
String::String(char *str)
{p=str;}

p还没有开辟空间本回答被提问者采纳