C++实现String类

来源:互联网 发布:万达电商 数据百家号 编辑:程序博客网 时间:2024/06/06 04:41
#include<iostream>#include<string>#include<cctype>using namespace std;class String{private:char *str;int len;static int num_strings;public:String();String(const char *s);String(const String &);~String();void Stringlow();int length()const{return len;}String &operator=(const String &);String &operator=(const char *);char &operator[](int i);const char &operator[](int i)const;//have a question???friend bool operator<(const String &st1,const String &st2);    friend bool operator>(const String &st1,const String &st2);friend bool operator==(const String &st1,const String &st2);friend String operator+(const String &st1,const String &st2);friend ostream &operator<<(ostream &os,const String &st);friend istream &operator>>(istream &is,String &st);};int String::num_strings=0;String::String(){len=4;str=new char[1];str[0]='\0';num_strings++;}String::String(const char *s){len=strlen(s);str=new char[len+1];strcpy(str,s);num_strings++;}String::String(const String &st){num_strings++;len=st.len;str=new char[len+1];strcpy(str,st.str);}String::~String(){--num_strings;delete[]str;}String &String::operator=(const String &st){if(this==&st)return *this;delete[]str;len=st.len;str=new char[len+1];strcpy(str,st.str);return *this;}String &String::operator=(const char *s){delete[]str;len=strlen(s);str=new char[len+1];strcpy(str,s);return *this;}char &String::operator[](int i){return str[i];}const char &String::operator[](int i)const{return str[i];}bool operator<(const String &st1,const String &st2){return (strcmp(st1.str,st2.str)<0);}bool operator>(const String &st1,const String &st2){return st1>st2;}bool operator==(const String &st1,const String &st2){return (strcmp(st1.str,st2.str)==0);}String operator+(const String &st1,const String &st2){char *strTemp=new char[st1.len+st2.len];strcpy(strTemp,st1.str);strcat(strTemp,st2.str);String Str(strTemp);delete[]strTemp;return(Str);}ostream &operator<<(ostream &os,const String &st){os<<st.str;return os;}istream &operator>>(istream &is,String &st){char temp[80];is.get(temp,80);if(is)st=temp;while(is && is.get()!='\n')continue;return is;}int main(){String str1,str2,strT;cin>>str1>>str2;strT=str1;cout<<strT<<endl;cout<<str2<<endl;cout<<strT+str2<<endl;system("pause");return 0;}

0 0