【无标题】无题 面向对象之封装 无语!

 

#include <iostream>
#include<string.h>
using namespace std;
class Mystring
{
private:
//    string str;
    int size;
    char *name;
public:
//构造函数
    Mystring(){name=new char[32];size=32;cout<<"无参构造"<<endl;}
    Mystring(char *a){name=new char[32];size=32;char nm[128]="";strcpy(nm,a);strcpy(name,nm);cout<<"有参构造"<<endl;}

//析构函数
    ~Mystring(){delete name;name=NULL;cout<<"析构函数"<<endl;}
//operator=为字符串赋值函数
Mystring &operator=(const Mystring& a)
{
    char nm[128]="";
    strcpy(nm,a.name);
    strcpy(this->name,nm);
    return *this;
}
Mystring &operator=(const char* a)
{
    char nm[128]="";
    strcpy(nm,a);
     strcpy(this->name,nm);
    return *this;
}
void show()
{
    cout<<"str= "<<this->name<<endl;
}
//at 访问指定字符 有边界检查
char &at(int a)
{

    if(a>32)
    {
        cout<<"失败"<<endl;
    }
    int b=strlen(name);
    cout<<"边界值为"<<b-1<<endl;
    if(a>=b)
    {
        cout<<"越界"<<endl;
        return name[a];
    }
    return name[a];
}
//operator[]访问指定字符
char &operator[](int a)
{
    if(a>32)
    {
        cout<<"失败"<<endl;
    }
    int b=strlen(name);
    cout<<"边界值为"<<b-1<<endl;
    if(a>=b)
    {
        cout<<"越界"<<endl;
        return name[a];
    }
    return name[a];
}
//data返回指定字符串首字符的指针
char *data()
{
    return name;
}
//c_str 返回字符串得不可修改的C字符数组版本
const char  *c_str()const
{
    return name;
}
//empty检查字符串是否为空
bool empty()
{
    return strlen(name)==0;
}
//size返回字符串
int sz()
{
    return strlen(name);
}
//capacity 返回当前对象分配的空间能保存的字符数量
int capacity()
{
   return size;
}
//clear //清除内容
Mystring & clear()
{
      for(int i=0;i<size;i++)
      {
          this->name[i]='\0';
      }
      return *this;
}
//push_back 后附字符到结尾
Mystring &push_back(char a)
{
    int b= strlen(name);
    name[b]=a;
    return *this;
}
//pop_back 移除末尾字符
Mystring &pop_back()
{
    int b=strlen(name);
    if(b>0)
    {
    name[b-1]='\0';
    return *this;
    }
    else
    {
        cout<<"字符串为空移除失败"<<endl;
    }
    return *this;
}
//append 后附字符到结尾
Mystring &append(char* a)
{
    char arr[128]="";
    strcpy(arr,a);
    strcat(name,arr);
    return *this;
}
//operator+=后附字符到结尾
Mystring &operator+=(const char a)
{
    int b= strlen(name);
    name[b]=a;
    return *this;
}
//operator+链接两个字符串或者或一个字符
Mystring &operator+(char *a)
{
    char arr[128]="";
    strcpy(arr,a);
    strcat(name,arr);
    return *this;
}
Mystring &operator+(char a)
{
    int b= strlen(name);
    name[b]=a;
    return *this;
}
//operator==比较字符串
bool operator==(const Mystring& a)const
{
    return  (strcmp(this->name,a.name))==0;
}
bool operator==(const char * a)const
{
    char buf[128]="";
    strcpy(buf,a);
    return  (strcmp(this->name,buf))==0;
}
bool operator!=(const Mystring& a)const
{
    return  (strcmp(this->name,a.name))!=0;
}
bool operator!=(const char * a)const
{
    char buf[128]="";
    strcpy(buf,a);
    return  (strcmp(this->name,buf))!=0;
}
bool operator>(const Mystring& a)const
{
    return  (strcmp(this->name,a.name))>0;
}
bool operator>(const char * a)const
{
    char buf[128]="";
    strcpy(buf,a);
    return  (strcmp(this->name,buf))>0;
}
bool operator<(const Mystring& a)const
{
    return  (strcmp(this->name,a.name))<0;
}
bool operator<(const char * a)const
{
    char buf[128]="";
    strcpy(buf,a);
    return  (strcmp(this->name,buf))<0;
}
bool operator>=(const Mystring& a)const
{
    return  (strcmp(this->name,a.name))>=0;
}
bool operator>=(const char * a)const
{
    char buf[128]="";
    strcpy(buf,a);
    return  (strcmp(this->name,buf))>=0;
}
bool operator<=(const Mystring& a)const
{
    return  (strcmp(this->name,a.name))<=0;
}
bool operator<=(const char * a)const
{
    char buf[128]="";
    strcpy(buf,a);
    return  (strcmp(this->name,buf))<=0;
}
friend ostream &operator<<(ostream &L,const Mystring &r);

};
ostream &operator<<(ostream &L,const Mystring &r)
{
    L<<r.name<<endl;
    return L;
}
int main()
{
    Mystring s1;
    s1="hahaha";
    s1.show();
    Mystring s2;
    s2 =s1;
    s2.show();
    Mystring s3("haha");
    s3.show();
    cout<<s3.at(0)<<endl;
    char ch=s3[1];
    cout<<ch<<endl;
    char *qtr=s3.data();
    qtr[1]='q';
    cout<<qtr<<endl;
    cout<<s3.c_str()<<endl;
    if(s1.empty())
    {
        cout<<"字符串为空"<<endl;
    }
    else
    {
        cout<<"不空"<<endl;
    }
    cout<<"当前字符数量为"<<s3.sz()<<endl;
    cout<<"最大容纳空间为"<<s3.capacity()<<endl;
    s3.clear();
    s3.show();
    s3.push_back('a');
    s3.show();
    s3.pop_back();
    s3.show();
    s3.append("nihao");
    s3.show();
    s3+='P';
    s3.show();
    Mystring s4=s3;
    if(s3==s4)
    {
        cout<<"相同"<<endl;
    }
    else
    {
        cout<<"不相同"<<endl;
    }
    if(s3!=s4)
    {
        cout<<"不相同"<<endl;
    }
    else
    {
        cout<<"相同"<<endl;
    }
    if(s3>s4)
    {
        cout<<"大于"<<endl;
    }
    {
        cout<<"小于或等于"<<endl;
    }
    if(s3<s4)
    {
        cout<<"小于"<<endl;
    }
    else
    {
        cout<<"大于或等于"<<endl;
    }
    if(s3>=s4)
    {
        cout<<"大于等于"<<endl;
    }
    else
    {
        cout<<"小于"<<endl;
    }
    if(s3<=s4)
    {
        cout<<"小于等于"<<endl;
    }
    else
    {
        cout<<"大于"<<endl;
    }
    cout<<s3;
    return 0;
}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值