仿照string类,实现mystring类
#include <iostream>
#include <cstring>
using namespace std;
class mystring
{
private:
char *str;
int size;
public:
//无参构造
mystring():size(15)
{
str = new char[size];
strcpy(str,"");
}
//有参构造
mystring(const char *s)
{
size = strlen(s);
str = new char[size+1];
strcpy(str,s);
}
//拷贝构造
mystring(const mystring &other):str(new char(*(other.str))),size(other.size)
{
strcpy(this->str,other.str);
}
//析构函数
~mystring()
{
delete str;
cout<<"mystring : 析构函数,this ="<<this<<endl;
}
//判空函数
bool Empty()
{
return str[0]=='\0';
}
//size函数
int mysize()
{
int len=strlen(str);
return len;
}
//c_str函数
char *c_str()
{
return str;
}
//at函数
char &at(int pos)
{
if(pos<0||pos>size-1)
{
cout<<"非法访问"<<endl;
exit(0);
}
else
{
return str[pos];
}
}
//拷贝赋值函数
mystring & operator=(const mystring &other)
{
if(this != &other)
{
this->size=other.size;
//*(this->str)=*(other.str);
strcpy(this->str,other.str);
}
return *this;
}
};
int main()
{
mystring s; //无参构造函数
if(s.Empty()) //判空
{
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
mystring s1("hello world");
cout<<"s1 ="<<s1.c_str()<<endl;
cout<<"s1 长度="<<s1.mysize()<<endl;
mystring s2(s1); //拷贝构造函数
cout << "s2 =" <<s2.c_str()<< endl;
s=s2; //拷贝赋值函数
if(s.Empty())
{
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
cout << "s =" <<s.c_str()<< endl;
s.at(0)='T'; //at()函数
cout << "s =" <<s.c_str()<< endl;
return 0;
}
结果