您的位置:首页 > 其它

双目运算符的重载

2016-03-28 18:45 447 查看
源代码:

<span style="font-size:14px;">#include<iostream>
#include<cstring>
using namespace std;
class String
{
public:
String();
String(char *str);
void String_display();
friend bool operator<(String &string1,String &string2);
friend bool operator>(String &string1,String &string2);
friend bool operator==(String &string1,String &string2);
private:
char *p;
};

String::String()
{
p=NULL;
}

String::String(char *str)
{
p=str;
}

void String::String_display()
{
cout<<p;
}

bool operator<(String &string1,String &string2)
{
if(strcmp(string1.p,string2.p)<0)
return true;
else
return false;
}

bool operator>(String &string1,String &string2)
{
if(strcmp(string1.p,string2.p)>0)
return true;
else
return false;
}

bool operator==(String &string1,String &string2)
{
if(strcmp(string1.p,string2.p)==0)
return true;
else
return false;
}

void compare(String &string1,String &string2)
{
if(operator<(string1,string2)==1)
{
string1.String_display();
cout<<"<";
string2.String_display();
}
else
if(operator>(string1,string2)==1)
{
string1.String_display();
cout<<">";
string2.String_display();
}
else
if(operator==(string1,string2)==1)
{
string1.String_display();
cout<<"==";
string2.String_display();
}
}

int main()
{
String excel1("All"),excel2("Hello");
compare(excel1,excel2);

return 0;
}</span>
运行结果:



1.本代码暂时没有实现手动地输入,现在还没有弄清楚该怎样实现这个功能;只能手动改变源代码的初始化来实现它的功能;

2.当一个重载函数作为一个类的函数时,可以隐藏一个参数,就像第一篇运算符重载的博客那个源代码一样,这是因为运算符函数是用this指针隐式地访问类对象的成员。实际上上一篇博客中源代码中运算符重载函数就是访问了两个对象成员,一个是形参成员,另外一个是this指向的的成员,即那个被省略的参数的成员,实际上其实同过了this指针被访问了,正是由于this指针的存在,所以被作为类中的函数时是可以少写一个参数的,当时这样是有要求的,必须要求后面的运算符运算式第一个参数是一个类对象,而且这个类对象必须与运算符函数的类型相同;

3.之所以友元运算符重载函数存在的意义就是为了防止第一个参数的类型与运算符重载函数类型不一致的情况;

4.双目运算符重载为友元函数时,由于友元函数不是该类的成员函数,因此在函数的形参列表中必须有两个参数,不能省略;

5.C++规定,赋值运算符”=“,下标运算符”[ ]“,函数调用运算符”()“,成员运算符"->"必须作为成员函数重载;

6.流插入"<<"和流提取运算符">>",类型转换符函数不能被定义为类的成员函数,只能作为友元类;

7.一般将单目运算符和符合运算符重载为成员函数;

8.一般将双目运算符重载为友元函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: