【无标题】无题 面向对象之封装 无语!
#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;
}