参考string类完成my_string类
代码:
#include <iostream>
#include <cstring>
using namespace std;
class my_string
{
private:
char *str;
int len;
public:
my_string()
{
len=15;
str=new char[len];
*str=0;
cout<<"无参构造"<<endl;
}
my_string(char *p)
{
len=15;
while(len<(int) strlen(p))
{
len=len+2;
}
str=new char[len];
strcpy(str,p);
cout<<"有参构造"<<endl;
}
my_string(const my_string &other)
{
len=other.len;
str=new char[len];
strcpy(str,other.str);
cout<<"拷贝构造"<<endl;
}
my_string &operator=(const my_string &other)
{
if(&other!=this)
{
this->len=other.len;
strcpy(this->str,other.str);
cout<<"拷贝赋值"<<endl;
}
return *this;
}
~my_string()
{
delete str;
cout<<"析构函数"<<endl;
}
void show()
{
cout<<"str>>"<<str<<endl;
}
bool empty()
{
return strlen(str)==0;
}
int size()
{
return strlen(str);
}
char &at(int pos)
{
return *(str+pos);
}
char *c_str()
{
return str;
}
};
int main()
{
my_string s1;
if(s1.empty())
{
cout<<"empty"<<endl;
}
s1.show();
my_string s2("end of string");
cout<<"size of s2="<<s2.size()<<endl;
s2.show();
my_string s3(s2);
cout<<"下标8>>"<<s3.at(8)<<endl;
s1=s3;
cout<<"c style string:"<<s1.c_str()<<endl;
s3.show();
s1.show();
return 0;
}
运行结果: