帮忙看下C++程序哪里出错!

编译能够通过,但是程序运行时被终止。高手,帮忙看下!

#include<iostream.h>
#include<string>
class String
{
public:
String(){mychar=NULL;}
String(char *my):mychar(my){}

void display()
{
cout<<*mychar;
}
friend String operator +=(String &s1,String &s2)
{
s1=s1+s2;
return (s1);
}
friend String operator +(String &s1,String &s2)
{
String s3;
s3=s1+s2;
return s3;
}
bool operator ==(String &s2)
{
if(strcmp(mychar,s2.mychar)==0)
return true;
else
return false;
}
private:
char *mychar;
};

int main()
{
String s1("book"),s2("hello"),s3;
s1+=s2;
s1.display();
cout<<endl;
s3=s1+s2;
s3.display();
cout<<endl;
cout<<(s1==s2)<<endl;
return 0;
}

#include<iostream.h>
#include<string>
class String
{
public:
String()
{
mychar[0]='\0';//初始化为空串
}
String(char *my)
{
strcpy(mychar,my);//直接赋值会出错
}

void display()
{
cout<<mychar;
}
friend String operator +=(String &s1,String &s2)
{
strcat(s1.mychar,s2.mychar);//你操作的是mychar,而不是对象
return (s1);
}
friend String operator +(String s1,String &s2)
{
String s3;
s3=strcat(s1.mychar,s2.mychar);//+号还没定义呢,所以不能用,否则就递归了
return s3;
}
bool operator ==(String &s2)
{
if(strcmp(mychar,s2.mychar)==0)
return true;
else
return false;
}
private:
char mychar[100];//必须有空间才可操作,因此用数组表示
};

void main()
{

String s1("book"),s2("hello"),s3;
s1+=s2;
s1.display();
cout<<endl;
s3=s1+s2;
s3.display();
cout<<endl;
cout<<(s1==s2)<<endl;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-29
运算符的重载函数有错

friend String operator +(String &s1,String &s2)
{
String s3;
s3=s1+s2; //这个+意义不明,应该把mychar属性改成pulic,
//然后用c++的字符串连接函数把s1和s2的mychar连接到s3的 mychar,另一个重载+的函数同理
return s3;
}
第2个回答  2010-05-29
没有什么错误呀,我也看不出来
相似回答
大家正在搜