#include <iostream>
using namespace std;
class mystring {
public:
//无参构造函数
mystring()
{
len=0;
str=nullptr;
}
//析构函数
~mystring()
{
if(str!=nullptr){
delete []str;
}
}
//有参构造函数
mystring(const char *_str)
{
len=mystrlen(_str);
str=new char[len+1];
mystrcpy(str,_str);
}
//拷贝构造函数
mystring(const mystring &operation)
{
len=operation.len;
str=new char[len+1];
mystrcpy(str,operation.str);
}
//拷贝复制函数
mystring &operator=(const mystring &operation)
{
if(this!=&operation){
len=operation.len;
str=new char[len+1];
mystrcpy(str,operation.str);
}
return *this;
}
bool myEmpty()
{
return str==nullptr?true:false;
}
int mySize()
{
return len;
}
const char *myStr()
{
return (const char *)str;
}
int mystrlen(const char *src)
{
const char *ch=src;
while(*ch!='\0'){
ch++;
}
return ch-src;
}
char *mystrcpy(char *dest,const char *src)
{
char *ch=dest;
while(*src!='\0'){
*(ch++)=*(src++);
}
*ch='\0';
return dest;
}
void display()
{
cout<<"size="<<mySize()<<endl;
cout<<"str="<<myStr()<<endl;
cout<<"Is empty: "<<(myEmpty()?"yes":"no")<<endl;
}
private:
char *str;
int len;
};
int main()
{
mystring s1("zhangsan");
mystring s2(s1);
mystring s3;
s3=s1;
s1.display();
cout<<"**********************"<<endl;
s2.display();
cout<<"**********************"<<endl;
s3.display();
return 0;
}