#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&);
bool operator==(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;
}
}
bool String::operator==(const String &s)
{
if (strcmp(this->m_data,s.m_data))
return true;
return false;
}
String & String::operator=(const String &rhs)
{
if (*this == rhs)
return *this;
delete []m_data;
m_data = NULL;
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 q[1000];
in >> q;
s.m_data = new char[strlen(q)+1];
strcpy(s.m_data,q);
return in;
}
String operator+(const String& lhs,const String&rhs)
{
String *ret = new String(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;
}