通过成员函数和友元函数的方法重载运算符"=","+"和比较运算符,实现两个字符串的赋值、连接等功能。
代码仅供参考。
#include<iostream>
#include<string.h>
using namespace std;
class String{
private:
char *ptr;
int len;
public:
String( );
String(char *s);//构造函数
~String(){
delete ptr;
}
void display();
//通过友元函数方法重载运算符
friend bool operator < (String &string1, String &string2);
friend bool operator <= (String &string1, String &string2);
friend bool operator >= (String &string1, String &string2);
friend String operator +(String &s1,String &s2);
friend String operator +=(String &s1, String &s2);
//通过成员函数方法重载运算符
String &operator=(const String &s);
bool operator !=(const String &s);
bool operator ==(const String &s);
bool operator > (const String &s);
//String &operator=(const String &); //声明赋值运算符重载函数 属于成员运算符重载函数
//String &operator属于使用引用返回函数值,返回函数的值类型为 String
//const String & 属于使用常引用作为函数参数
};
String::String()
{
len=0;
ptr=NULL;
}
String::String(char *s)
{
len=strlen(s);
ptr=new char[strlen(s)+1];
strcpy(ptr,s);
}
void String::display()
{
cout<<ptr<<endl;
}
String operator +(String &s1,String &s2 )
{
String s;
s.len=s1.len+s2.len;
s.ptr=new char[s.len+1];
strcpy(s.ptr,s1.ptr);
strcat(s.ptr,s2.ptr);
return s;
}
String operator +=(String &s1,String &s2 )
{
String s;
s.len=s1.len+s2.len;
s.ptr=new char[s.len+1];
strcpy(s.ptr,s1.ptr);
strcat(s.ptr,s2.ptr);
return s;
}
String &String::operator=(const String &s){ //定义赋值运算符重载函数
if(this==&s) return *this; //这里的 &s 表示 s 的地址
delete ptr;
ptr=new char[strlen(s.ptr)+1];
strcpy(ptr,s.ptr);
return *this;
}
bool operator < (String &string1, String &string2)
{
if(strcmp(string1.ptr,string2.ptr)<0)
{
return true;
}
else
{
return false;
}
}
bool operator <= (String &string1, String &string2)
{
if(strcmp(string1.ptr,string2.ptr)<=0)
{
return true;
}
else
{
return false;
}
}
bool operator >= (String &string1, String &string2)
{
if(strcmp(string1.ptr,string2.ptr)>=0)
{
return true;
}
else
{
return false;
}
}
bool String::operator !=(const String &s)
{
if (len != s.len)
{
return true;
}
return strcmp(ptr, s.ptr);
}
bool String::operator ==(const String &s)
{
if (len != s.len)
{
return false;
}
return !strcmp(ptr, s.ptr);
}
bool String::operator >(const String &s)
{
if(strcmp(ptr,s.ptr)>0)
{
return true;
}
else
{
return false;
}
}
int main(){
String string1("I "),string2("Love "),string3("You");
cout << "第一个字符串(string1):" << endl;
string1.display();
cout << "第二个字符串(string2):" << endl;
string2.display();
cout << "第三个字符串(string3):" << endl;
string3.display();
cout << "string1==sting2:" << endl;
cout << (string1==string2) << endl;
cout << "string1>string2:" << endl;
cout << (string1>string2) << endl;
cout << "将第一个和第二个字符串连接:" << endl;
String string4;
string4=string1 + string2;
string4.display();
cout << "将第三个字符串赋值给第一个字符串:" << endl;
string1=string3;
string1.display();
return 0;
}