自行实现一个Mystring类
#include<iostream>
#include<string> //可以使用string类
#include<cstring> //#include <string.h>
using namespace std;
class Mystring
{
private:
int len;
char *str;
public:
//无参构造函数
Mystring()
{
str = nullptr;
len = 0;
}
//无参构造函数,使用初始化列表
//Mystring():str(nullptr), len(0){}
//有参构造函数
Mystring(const char *const s)
{
if (s) //即判断const char *const s 字符串是否为空
{
len = strlen(s);
str = new char[len + 1]; // +1 for null terminator
strcpy(str, s);
}
else
{
str = nullptr;
len = 0;
}
}
~Mystring()
{
if(nullptr != str)
{
delete[] str;//成员变量包含指针成员,要手动释放其指向的堆空间
}
}
// 拷贝构造函数
Mystring(const Mystring &other)
{
len =other.len;
str = new char[len+1];
strcpy(str, other.str);
}
//拷贝赋值函数
Mystring& operator=(const Mystring& other)
{
if(&other != this)
{
if(str != nullptr)
{
delete []str;
str = nullptr;
}
len = other.len;
str = new char[len+1];
strcpy(str, other.str);
}
return *this;
}
//data()
char* data()
{
return str;
}
//size()
int size()
{
return len;
}
//empty()
bool empty()
{
return 0==len;
}
//at()
char& at(int index)
{
if(index<0 || index>=len)
{
cout << index <<"位置越界" << endl;
return str[0];
}
return str[index]; //*(str+index)
}
};