string类自我实现
函数的实现方式以及必要解释都在下述代码中注释
class String
{
public:
String()//无参构造
//初始化
:_str(new char[16]),//对_str开空间
_size(0),//初始有效字符为0个
_capacity(0)//树池容量为0
{
_str[_size] = '\0';//给初始有效字符处置'\0
}
String(const char* str)//带参构造
{
_size = strlen(str);//算出str的长度,即为_str的有效字符
_str = new char[_size + 1];//为_str开新空间
strcpy(_str,str);//拷贝
_capacity = _size;//当前容量置为当前有效字符
}
~String()//析构函数
{
if(_str)//如果_str不为空
{
delete[] _str;//释放_str空间
_size = _capacity = 0;//当前游侠字符以及容量为0
_str = nullptr;//_str置为nullptr
}
}
//带参构造,与上述带参构造一样
String(const String& str)
:_str(new char[str._capacity + 1]),
_size(str._size),
_capacity(str._capacity)
{
strcpy(_str,str._str);
}
//=运算符重载
String& operator=(const String& str)
{
if(this != &str)//排除自己等号赋值
{
char* tmp = new char[str._capacity + 1];//临时对象tmp开空间
strcpy(tmp,str._str);//拷贝复制
delete[] _str;//释放当前_str
_str = tmp;//将临时对象赋给_str
_size = str._size;//_str的有效字符
_capacity = str._capacity;//_str的容量
}
return *<