#include<iostream>
#include<string>
#include<cstring>
using namespace std;
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;
}
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;
}
friend ostream& operator<<(ostream &L, const Mystring& R);
friend istream& operator>>(istream& L, Mystring& R);
};
//重载<<
ostream& operator<<(ostream &L, const Mystring& R)
{
L << R.str;
return L;
}
//重载>>
istream& operator>>(istream& L, Mystring& R)
{
char buf[200];
L >> buf;
R.len = strlen(buf);
if(nullptr != R.str)
{
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[])
{
Mystring s("hello");
cout << s << endl;
cin >> s;
cout << s << endl;
return 0;
}
2024年9.3作业 Mystring -operator改写
最新推荐文章于 2024-10-09 15:50:47 发布