using namespace std;
class Mystring
{
public:
Mystring()
{
str=nullptr;
len=0;
cout<<"无产构造函数"<<endl;
}
Mystring(const char *s)
{
int i=0;
len=strlen(s);
str=new char[len];
while(i<len)
{
str[i]=s[i];
i++;
}
cout<<"有产构造函数"<<endl;
}
//拷贝构造函数
Mystring(Mystring &other):len(other.len),str(new char[20])
{
strcpy(str,other.str);
cout<<"拷贝构造函数"<<endl;
}
//拷贝赋值函
Mystring& operator=(const Mystring &other)
{
if(&other!=this)
{
len=other.len;
if(nullptr==str)
{
str=new char[20];
}
strcpy(str,other.str);
}
cout<<"拷贝赋值函数"<<endl;
return *this;
}
//析构函数
~Mystring()
{
if(str != nullptr)
{
delete []str;
str=nullptr;
}
cout<<"析构函数"<<endl;
}
//data()
const char *data()
{
char *s=nullptr;
s=str;
return s;
}
//size()
int size()
{
return strlen(str);
}
//empty()
bool empty()
{
if(str==nullptr)
return 1;
else
return 0;
}
//at()
char at(int index)
{
if(index>=0&&index<strlen(str))
{
return str[index];
}
else
{
cout <<"out of range"<<endl;
return -1;
}
}
private:
char *str;
int len;
};
int main(int argc, const char *argv[])
{
Mystring s1("hello");
Mystring s2(s1);
cout<<"s1="<<s1.data()<<endl;
cout<<"s2="<<s2.data()<<endl;
cout<<"s1 len="<<s1.size()<<endl;
cout<<"s1[1]="<<s1.at(1)<<endl;
cout<<"s1 empty="<<s1.empty()<<endl;
Mystring s3;
s3=s2;
cout<<"s3="<<s3.data()<<endl;
return 0;
}