cpp
#include <iostream>
#include <cstring>
using namespace std;
class myString
{
private:
char *str; //记录c风格的字符串
int size; //记录字符串的实际长度
public:
//无参构造
myString():size(10)
{
str = new char[size]; //构造一个长度为10的字符串
strcpy(str," "); //赋值为空串
}
//有参构造
myString(const char *s)
{
size = strlen(s);
str =new char[size+1];
strcpy(str,s);
}
//拷贝构造
myString(const myString &other)
{
size = strlen(other.str);
str =new char[size+1];
strcpy(str,other.str);
}
//析构函数
~myString ()
{
delete str;
str = nullptr;
}
//拷贝赋值函数
myString & operator=(const myString &other)
{
if(this != &other)
{
if(this->str != NULL)
{
delete str;
}
this->str = new char[strlen(other.str)+1];
strcpy(str,other.str);
}
return *this;
}
//判空函数
bool str_empty()
{
return str == nullptr;
}
//size函数
int str_size()
{
return size;
}
//c_str函数
char *c_str()
{
char *c_string = new char[size +1];
strcpy(c_string, str);
return c_string;
}
//at函数
char &at(int pos)
{
if(pos<0||pos>size-1)
return*str;
return *(str+pos);
}
//加号运算符重载
const myString operator+(const myString &s)
{
myString tmp;
tmp.size = size + s.size;
tmp.str = new char[tmp.size+1];
strcpy(tmp.str,str);
char *dstr = tmp.str + size;
strcpy(dstr, s.str);
dstr = nullptr;
return tmp;
}
//加等于运算符重载
const myString operator+=(const myString &s)
{
myString tmp(*this);
size = tmp.size + s.size;
delete str;
str = new char[size+1];
strcpy(str,tmp.str);
char *dstr = str + tmp.size;
strcpy(dstr, s.str);
dstr = nullptr;
return *this;
}
//关系运算符重载(>)
bool operator >(const myString &s)
{
int i=0;
for(;(*(str+i)==*(s.str+i) && *(str+i)!=0 && *(s.str+i)!=0);i++);
return *(str+i)-*(s.str+i)>0;
}
//中括号运算符重载
char &operator[](int pos)
{
if(pos<0||pos>size-1)
return *str;
return *(str+pos);
}
//定义成员函数
void show()
{
cout<<str<<endl;
}
};
int main()
{
myString s1("hello ");
myString s2("world");
myString s3;
s3 = s1+s2;
s3.show();
myString s4;
s4 = s3;
s4.show();
s1+=s2;
s1.show();
s1[0]='H';
s1.show();
s1.at(6)='W';
s1.show();
return 0;
}