the operator "="error in class "String"
Code:
#include <iostream>
using namespace std;
class String
{
public:
String(const char *str = NULL); // 通用构造函数
String(const String &another); // 拷贝构造函数
~ String(); // 析构函数
String& operator =(const String&);// 赋值函数
friend ostream& operator << (ostream&, const String& s);
friend istream& operator>>(istream& in, String& s);
friend String& operator+(const String&,const String&);
private:
char *m_data; // 用于保存字符串
};
String::String(const char *str)
{
if (str == NULL)
m_data = NULL;
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data,str);
}
}
String::String(const String &another)
{
m_data = new char[strlen(another.m_data)+1];
strcpy(m_data,another.m_data);
}
String::~String()
{
if(m_data != NULL)
{
delete m_data;
m_data = NULL;
}
}
String & String::operator=(const String &rhs)
{
if (*(this->m_data) == *rhs.m_data)
return *this/*rhs*/;
if(this->m_data!=NULL)
this->~String();
m_data = new char[strlen(rhs.m_data)+1];
strcpy(m_data,rhs.m_data);
return *this;
}
ostream& operator << (ostream& out, const String& s)
{
if(s.m_data)
out << s.m_data << endl;
return out;
}
istream& operator>>(istream& in, String& s)
{
char *s1 = new char[1000];
in >> s1;
s.m_data = new char[strlen(s1)+1];
strcpy(s.m_data,s1);
return in;
}
String& operator+(const String& lhs,const String&rhs)
{
String ret(lhs);
strcat(ret.m_data,rhs.m_data);
return ret;
}
int main()
{
String s ;
cin >> s;
String s1;
cin >> s1;
String s2= s+s1;//this sentence has question , but i don't know why
cout << s2;
}
who can explain it to me ?thanks!