#include <iostream>
#include <cstring>
using namespace std;
class mystring
{
public:
//无参构造函数
mystring()
{
str = nullptr;
len = 0;
}
//有参构造函数
mystring(const char *s)
{
len = strlen(s);
str = new char[len + 1];
strcpy(str, s);
}
//拷贝构造函数
mystring(const mystring &other)
{
len = other.len;
str = new char[len + 1];
strcpy(str, other.str);
}
//拷贝赋值函数
mystring & operator = (const mystring &other)
{
if(&other != this)
{
len = other.len;
if(str == nullptr)
{
str = new char[len + 1];
}
else
{
delete []str;
str = nullptr;
}
strcpy(str, other.str);
}
return *this;
}
//析构函数
~mystring()
{
if(str != nullptr)
{
delete []str;
str = nullptr;
}
cout << this << " 析构函数" << endl;
}
mystring operator+(const mystring &R)const
{
mystring s;
s.len = len + R.len;
cout << "&s = " << &s << endl;
if(s.str != nullptr)
{
delete []s.str;
s.str = nullptr;
}
s.str = new char[s.len + 1];
strcpy(s.str, str);
strcat(s.str, R.str);
return s;
}
char &operator[](int index) const
{
if(index<0 && index>len)
{
cout << "超出范围" << endl;
return str[0];
}
return str[index];
}
bool operator!=(const mystring &R)const
{
if(strcmp(str, R.str) != 0)
{
return true;
}
else
{
return false;
}
}
bool operator==(const mystring &R)const
{
if(strcmp(str, R.str) == 0)
{
return true;
}
else
{
return false;
}
}
bool operator<(const mystring &R)const
{
if(strcmp(str, R.str) < 0)
{
return true;
}
else
{
return false;
}
}
bool operator<=(const mystring &R)const
{
if(strcmp(str, R.str) <= 0)
{
return true;
}
else
{
return false;
}
}
bool operator>(const mystring &R)const
{
if(strcmp(str, R.str) > 0)
{
return true;
}
else
{
return false;
}
}
bool operator>=(const mystring &R)const
{
if(strcmp(str, R.str) >= 0)
{
return true;
}
else
{
return false;
}
}
friend ostream &operator<<(ostream &L, const mystring &R);
friend istream &operator>>(istream &L, mystring &R);
private:
char *str;
int len;
};
ostream &operator<<(ostream &L, const mystring &R)
{
cout << R.str;
return L;
}
istream &operator>>(istream &L, mystring &R)
{
char buf[200] = " ";
L >> buf;
R.len = strlen(buf);
if(R.str != nullptr)
{
delete[]R.str;
R.str = nullptr;
}
R.str = new char[R.len + 1];
strcpy(R.str, buf);
return L;
}
int main(int argc, const char *argv[])
{
return 0;
}
9月3日作业
于 2024-09-04 09:27:52 首次发布