who can explain it to me ?thanks!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; }