① string类里面的操作符重载
输出操作符(“<<”):
friend ostream& operator<<(ostream& os,const String &str)
{
return os << str.base;
}
定义为友元函数。
输入操作符(“>>”):
#define STR_SIZE 1024
friend istream& operator>>(istream& is,String &str)
{
str.base = new char[STR_SIZE];
return is >> str.base;
}
加(“+=”)操作符:
String& operator+=(const String& str)
{
char *s = new char[length+1];
strcpy(s,base);
base = new char[length+str.length+1];
strcpy(base,s);
strcat(base,str.base);
length += str.length;
return *this;
}
String& operator+=(const char *p)
{
char *s = new char[length+1];
strcpy(s,base);
base = new char[length+strlen(p)+1];
strcpy(base,s);
strcat(base,p);
length += strlen(p);
return *this;
}
String& operator+=(const char p)
{
char *s = new char[length+1];
strcpy(s,base);
base = new char[length+2];
strcpy(base,s);
base[length] = p;
base[length+1] = '/0';
length += 1;
return *this;
}
加(“+”)操作符
friend String operator+(String& str1,const String& str2)
{
String ret(str1);
ret += str2;
return ret;
}
friend String operator+(String& str1,const char *p)
{
String ret(str1);
ret += p;
return ret;
}
friend String operator+(String& str1,const char p)
{
String ret(str1);
ret += p;
return ret;
}
赋值(“=”)操作符
String& operator=(const String& str2)
{
base = new char[str2.length+1];
strcpy(base,str2.base);
length = str2.length;
return *this;
}
String& operator=(const char *p)
{
base = new char[strlen(p)+1];
strcpy(base,p);
length = strlen(p);
return *this;
}
String& operator=(const char p)
{
base = new char[2];
base[0] = p;
base[1] = '/0';
return *this;
}
关系操作符重载:
相等(“==”)操作符:
friend bool operator==(const String& str1,const String& str2)
{
int result = strcmp(str1.base,str2.base);
if (result != 0)
{
return false;
}
else
{
return true;
}
}
friend bool operator==(const String& str1,const char* p)
{
int result = strcmp(str1.base,p);
if (result != 0)
{
return false;
}
else
{
return true;
}
}
不等(“!=”)操作符:
friend bool operator!=(const String& str1,const String& str2)
{
return !(str1 == str2);
}
friend bool operator!=(const String& str1,const char *p)
{
return !(str1 == p);
}
小于(“<”):
friend bool operator<(const String& str1,const String& str2)
{
int result = strcmp(str1.base,str2.base);
if (result < 0)
{
return true;
}
else
{
return false;
}
}
friend bool operator<(const String& str1,const char* p)
{
int result = strcmp(str1.base,p);
if (result < 0)
{
return true;
}
else
{
return false;
}
}