string 的现代式写法

#include<iostream>

using namespace std;

class String

{

friend ostream&  operator<<(ostream &os,String &str);

public:

String()

{

_str=new char[1];

*_str='\0';

}

//

String(char *str):_str(new char[(strlen(str)+1)])

{

strcpy(_str,str);

}

//拷贝构造函数的现代式写法

String(const String &str)

{

_str=new char[1];

String tmp(str._str);

swap(_str,tmp._str);

}

//

~String()

{

if(_str!=NULL)

delete [] _str;

}

//

String operator=( String &str)

{

if(this!=&str)

{

String tmp(str);

swap(_str,tmp._str);

}

return *this;

}

//

int my_strcmp(const char *str1,const char *str2)

{

while(str1!=NULL&&str2!=NULL)

{

   if(*str1==*str2)

   {

   *str1++;

   *str2++;

   }

   if(*str1<*str2)

   return -1;

   else if(*str1>*str2)

   return 1;

}

return 0;

}

bool operator==(const String &str)

{

if(my_strcmp(this->_str,str._str)==0)

{

return true;

}

return false;

}

//

int operator>(const String &str)

{

if(my_strcmp(this->_str,str._str)>0)

{

return 1;

}

return -1;

}

//

int operator<(const String &str)

{

if(my_strcmp(this->_str,str._str)<0)

{

return 1;

}

return -1;

}

 

 

private:

char* _str;

 

};

ostream& operator<<(ostream &os,String &str)

{

os<<str._str<<endl;

return os;

}

 

 

int main()

{

String str1("abc");

String str2(str1);

String str3;

str3=str2;

String str4("aba");

cout<<str2<<endl;

cout<<str3<<endl;

cout<<str4.operator>(str1)<<endl;

system("pause");

return 0;

}