双目运算符的重载
2016-03-28 18:45
447 查看
源代码:
1.本代码暂时没有实现手动地输入,现在还没有弄清楚该怎样实现这个功能;只能手动改变源代码的初始化来实现它的功能;
2.当一个重载函数作为一个类的函数时,可以隐藏一个参数,就像第一篇运算符重载的博客那个源代码一样,这是因为运算符函数是用this指针隐式地访问类对象的成员。实际上上一篇博客中源代码中运算符重载函数就是访问了两个对象成员,一个是形参成员,另外一个是this指向的的成员,即那个被省略的参数的成员,实际上其实同过了this指针被访问了,正是由于this指针的存在,所以被作为类中的函数时是可以少写一个参数的,当时这样是有要求的,必须要求后面的运算符运算式第一个参数是一个类对象,而且这个类对象必须与运算符函数的类型相同;
3.之所以友元运算符重载函数存在的意义就是为了防止第一个参数的类型与运算符重载函数类型不一致的情况;
4.双目运算符重载为友元函数时,由于友元函数不是该类的成员函数,因此在函数的形参列表中必须有两个参数,不能省略;
5.C++规定,赋值运算符”=“,下标运算符”[ ]“,函数调用运算符”()“,成员运算符"->"必须作为成员函数重载;
6.流插入"<<"和流提取运算符">>",类型转换符函数不能被定义为类的成员函数,只能作为友元类;
7.一般将单目运算符和符合运算符重载为成员函数;
8.一般将双目运算符重载为友元函数。
<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.一般将双目运算符重载为友元函数。
相关文章推荐
- 面试问题1:给一个无序数组,找到其中位数。
- 吐槽CodeDom
- node.js学习笔记之浅谈观察者模式
- NYOJ 123士兵杀敌(四)【树状数组||区间树】
- 51NOD 1351 吃点心 贪心
- [offer收割]编程练习赛3-题目2:机会渺茫
- Jquery -post
- Genymotion使用中碰到的问题总结
- node.js版本升级
- Log4j每天、每小时、每分钟定时生成日志文件
- Bzoj 1046: [HAOI2007]上升序列 二分,递推
- html()、text()、val()、innerHTML、value()的区分
- Ansible2:主机清单
- gets()用法
- 通用树--GTree(双亲孩子法)
- Spring事务的隔离级别
- Python学习路程day9
- mac 下 svn ignore 操作
- Java中的static关键字解析
- 通过ContentProvider读取对象