- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单目运算符的重载解读
单目运算符的重载 万军 通信1403单目运算符只有一个操作符,如!a,-b,c,*p,还有最常用的++i和--i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。 单目运算符的重载 单目运算符只有一个操作符,在这里,我们只介绍自加++和自减--运算符。 ++,--运算符有前置,后置之分 前置运算符作为一元运算符重载 1.重载为成员函数: T operator++(); T operator--(); 2.重载为友元函数:T operator++(T); T operator--(T); 单目运算符的重载 后置运算符作为二元运算符重载 多写一个参数,具体无意义 1.重载为成员函数: T operator++(int); T operator--(int); 2.重载为友元函数: T operator++(T,int); T operator--(T,int); 以重载++为例的语法形式 成员函数重载 友元函数重载 前缀式 对象.operator++() operator++(类对象) 后缀式 对象.operator++(int) operator++(类对象,int) 下面以自增运算符”++“为例,介绍单目运算符的重载 例:有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。 在程序中对运算符“++”进行了重载,使它能用于Time类对象. 例1 Int main(){ cdemo d(5); cout (d++) “ , ”; //等价于d operator++(0); cout d “ , ”; cout (++d) “ , ”; //等价于d operator++(); cout d endl; cout (d--) “ , ”; //等价于 operator--(d,0); cout d “ , ”; cout (--d) “ , ”; //等价于 operator--(d); cout d endl; return 0; } 输出结果: 5,6,7,7 7,6,5,5 #includeiostream.h class counter { unsigned int value; public: counter() {value=o;} void operator++(); //前缀方式重载 void operator--(); //前缀方式重载 unsigned int operator()(); }; void counter::operator++() { If(value8) value++; } Void counter::operator--() { If(value6) value--; } unsigned int counter::operator()() {return value; } main() { counter my_counter; for(int i=0;i12;i++) { ++my_counter; cout“\n my_counter=”my_counter(); } --my_counter; --my_counter; --my_counter; cout“\n my_counter=”my_counter(); return0; } 用成员函数实现运算符的重载时,运算符的左操作数为当前对象,并且要用到隐含的this指针。运算符重载函数不能定义为静态的成员函数,因为静态的成员函数中没有this指针 一般来说,单目运算符最好被重载为成员函数;对双目运算符最好被重载友元函数。 前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。 后置单目运算符重载为类的成员函数时,函数要带有一个整型形参。 注意点: Ending… 谢谢
文档评论(0)