#include <iostream>
#include<string.h>
using namespace std;
class String
{
public:
String( const char *str=NULL);//普通构造函数
String(const String &other); //拷贝构造函数
String& operator =(const String &other); //赋值运算符函数
String operator +(const String &other); //重载+号(字符串的连接)
friend ostream& operator<<(ostream &out,const String &s); //重载输出运算符
friend istream& operator>>(istream &in,String &s);//重载输入运算符
~String(); //析构函数
private:
char *m_data;
};
istream& operator>>(istream &in,String &s)
{
in>>s.m_data;
return in;
}
ostream& operator<<(ostream &out,const String &s)
{
out<<s.m_data;
return out;
}
String::~String()
{
if(m_data!=NULL)
{
delete [] m_data;
m_data=NULL;
}
}
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 &other)//拷贝构造函数
{
if(other.m_data==NULL)
m_data=NULL;
else
{
m_data=new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
String& String:: operator =(const String &other)//重载(赋值)=(析构+拷贝构造)
{
if(this == &other) //检查自赋值
return *this;
delete []m_data;//释放原有的内存资源
m_data=NULL;
m_data=new char[strlen(other.m_data)+1]; //分配新的内存资源,并复制内容
strcpy(m_data,other.m_data);
return *this; //返回本对象的引用
}
String String::operator+(const String &str) //重载字符串连接(+)运算符
{
String NewString ;
int size = strlen(m_data)+strlen(str.m_data);
NewString.m_data = new char[size+1];
strcpy(NewString.m_data,m_data);
strcat(NewString.m_data,str.m_data);
return NewString;
}