9月3日作业

 #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;
 }
                                                                                                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值