构造函数:mystring(const *str=NULL):data(NULL);
析构函数:~mystring();
拷贝构造函数:mystring(const mystring &other);//防止浅拷贝所产生的double free问题
输入>>函数:istream &operator>>(istream &in,mystring &other);
输出<<函数:ostream &operator<<(ostream &out,mystring &other);
//b.尝试编写Mystring类,实现+,+=,==,=,cout输出,cin输入
#include <iostream>
using namespace std;
#include <cstring>
class mystring
{
public:
mystring(const char *str=NULL):data(NULL)
{
if(str==NULL)
{
data=new char[1];
*data='\0';
}
else
{
int len=strlen(str);
this->data=new char[len+1];
strcpy(data,str);
}
}
~mystring()
{
delete[]data;
}
mystring(const mystring &other)
{
int len=strlen(other.data);
data=new char[len+1];
strcpy(data,other.data);
}
friend istream& operator>>(istream &in,mystring &other);
friend ostream& operator>>(ostream &out,mystring &other);
mystring &operator=(const mystring &other);
char *data;
};
istream& operator>>(istream &in,mystring &other)
{
char buffer[64]={0};
in>>buffer;
other.data=new char[strlen(buffer)+1];
strcpy(other.data,buffer);
return in;
}
ostream& operator<<(ostream &out,mystring &other)
{
out<<other.data;
return out;
}
mystring &operator=(const mystring &other)
{
if(this==&other)
{
return *this;
}
delete[]data;
int len=strlen(other.data);
this->data=new char[len+1];
strcpy(this->data,other.data);
return *this;
}