#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
class Mystring
{
public:
//无参构造函数
Mystring()
{
str=nullptr;
len=0;
cout<<"无参构造函数"<<endl;
}
//有参构造函数
Mystring(const char* s)
{
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
cout<<"有参构造函数"<<endl;
}
//拷贝构造函数
Mystring(Mystring &other):str(new char[other.len+1]),len(other.len)
{
strcpy(str,other.str);
cout<<"深拷贝构造函数"<<endl;
}
//拷贝赋值函数
Mystring& operator=(const Mystring &other)
{
if(&other!=this)
{
len=other.len;
}
if(nullptr==str)
{
str=new char(other.len+1);
}
strcpy(str,other.str);
cout<<"拷贝赋值函数"<<endl;
return *this;
}
//data() c_str() 获取字符串首地址
char* data()
{
return str;
}
//size() length()
int size()
{
return len;
}
//empty()
bool empty()
{
returb 0==len;
}
//at() 通过下标访问string类中字符串对应的位置
char& at(int index)
{
if(index>=len || index<0)
{
cout<<index<<"越界了"<<endl;
return str[0];
}
return str[index];
}
//析构函数
~Mystring()
{
if(str!=nullptr)
{
delete []str;
str=nullptr;
}
cout<<"析构函数"<<endl;
}
private:
char *str;
int len;
};
int main(int argc, const char *argv[])
{
string s("hello");
Mystring string1("hello");//构造函数
Mystring string2(string1);//拷贝构造函数
Mystring string3;//无参构造函数
string3=string1;//拷贝赋值函数
return 0;
}
实现mystring类
于 2024-09-02 22:47:20 首次发布