#include<iostream>
#include<string>
#include<cstring>
class Mystring
{
private:
int len;
char*str;
public:
Mystring()
{
str=nullptr;
len=0;
}
Mystring(const char*s)
{
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
}
~Mystring()
{
if(str!=nullptr)
{
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;
}
char *data()
{
return str;
}
int size()
{
return len;
}
bool empty()
{
return len==0;
}
char at(int index)
{
if (index<0||index>=len)
{
std::cout<<"越界"<<std::endl;
return str[0];
}
else
{
return str[index];
}
}
Mystring operator+(const Mystring& other) const //+重载
{
Mystring mstr;
mstr.len = this->len + other.len;
mstr.str = new char[mstr.len + 1];
std::strcpy(mstr.str, this->str);
std::strcat(mstr.str, other.str);
return mstr;
}
const char& operator[](size_t index) const //[]
{
return str[index];
}
bool operator==(const Mystring& other) const //==重载
{
return std::strcmp(this->str, other.str) == 0;
}
bool operator!=(const Mystring& other) const //!=重载
{
return !(*this == other);
}
bool operator<(const Mystring& other) const //<
{
return std::strcmp(str, other.str) < 0;
}
bool operator<=(const Mystring& other) const //<=
{
return std::strcmp(str, other.str) <= 0;
}
bool operator>(const Mystring& other) const //>
{
return std::strcmp(str, other.str) > 0;
}
bool operator>=(const Mystring& other) const //>=
{
return std::strcmp(str, other.str) >= 0;
}
};
int main(int argc, const char *argv[])
{
return 0;
}
标签:const,string,c++,return,other,len,str,重载,Mystring
From: https://blog.csdn.net/weixin_72476389/article/details/141873026