#include<iostream>
#include<string.h>
using namespace std;
class CMyString
{
private:
char *m_pStr;
friend ostream &operator<<(ostream &os,CMyString &obj);
friend CMyString operator +(const char *src,const CMyString &obj);
friend int operator==(const char *src,CMyString &obj);
friend istream &operator>>(istream &is,CMyString &obj);
public:
CMyString() //默认构造
{
m_pStr = new char[1];
*m_pStr = '\0';
}
CMyString(const char *src) //带参构造
{
m_pStr = new char[strlen(src)+1];
strcpy(this->m_pStr, src);
cout<<"CMyString(const char *src)"<<endl;
}
CMyString(CMyString &obj)
{
m_pStr=new char[strlen(obj.m_pStr)+1];
strcpy(m_pStr,obj.m_pStr);
cout<<"CMyString(CMyString &obj)"<<endl;
}
const char *operator=(const char *src)
{
delete []m_pStr;
m_pStr=NULL;
m_pStr=new char[strlen(src)+1];
strcpy(m_pStr,src);
cout<<"const char *oprator=(const char *src)"<<endl;
return src;
}
CMyString &operator =(const CMyString &obj)
{
if(this==&obj)
{
return *this;
}
delete []m_pStr;
m_pStr=NULL;
m_pStr=new char [strlen(obj.m_pStr)+1];
strcpy(m_pStr,obj.m_pStr);
cout<<"CMyString &operator =(CMyString &obj)"<<endl;
return *this;
}
size_t length()const
{
const char *p=this->m_pStr;
while(*p++!='\0');
return p-m_pStr-1;
}
CMyString operator+(const char *src)
{
CMyString newobj;
delete newobj.m_pStr;
newobj.m_pStr=new char[strlen(this->m_pStr)+strlen(src)+1];
strcpy(newobj.m_pStr,m_pStr);
strcat(newobj.m_pStr,src);
cout<<"CMyString operator+(const char *src)"<<endl;
return newobj;
}
CMyString operator+(const CMyString &obj)
{
CMyString newobj;
delete newobj.m_pStr;
newobj.m_pStr=new char[strlen(this->m_pStr)+strlen(obj.m_pStr)+1];
strcpy(newobj.m_pStr,m_pStr);
strcat(newobj.m_pStr,obj.m_pStr);
cout<<"CMyString operator+(const CMyString &obj)"<<endl;
return newobj;
}
int operator==(const char *src)
{
const char *p=this->m_pStr;
while(*p==*src)
{
if(*p=='\0')
{
return 0;
}
p++;
src++;
}
return (*p>*src)?1:-1;
}
~CMyString()
{
delete []m_pStr;
m_pStr=NULL;
}
};
CMyString operator +(const char *src,const CMyString &obj)
{
CMyString newobj;
delete newobj.m_pStr;
newobj.m_pStr=new char [strlen(src)+obj.length()+1];
strcpy(newobj.m_pStr,src);
strcat(newobj.m_pStr,obj.m_pStr);
cout<<"CMyString operator +(const char *src,const CMyString &obj)"<<endl;
return newobj;
}
int operator==(const char *src,CMyString &obj)
{
return strcmp(src,obj.m_pStr);
}
ostream &operator<<(ostream &os,CMyString &obj)
{
os<<obj.m_pStr;
return os;
}
void GetString(char * &str)
{
char c;
static int nlength = 0;
nlength++;
if ((c = getchar()) == '\n') //判断输入字符结束
{
str = new char[nlength];
c = '\0';
}
else
{
GetString(str);
}
str[--nlength] = c;
}
istream &operator>>(istream &is,CMyString &obj)
{
delete []obj.m_pStr;
GetString(obj.m_pStr);
return is;
}
int main()
{
CMyString str="111111";
cout<<str<<endl;
CMyString str1;
str1="0000";
cout<<str1<<endl;
str1=str;
cout<<str1<<endl;
str1=str1+"22222";
cout<<str1<<endl;
str1=str1+str1;
cout<<str1<<endl;
str1="00000000"+str1;
cout<<str1<<endl;
str1="asdsadasd";
cout<<(str1=="asdsadasc")<<endl;
cout<<("asdsadasc"==str1)<<endl;
cin>>str1;
cout<<str1<<endl;
system("pause");
return 0;
}