10重载双目运算符

10重载双目运算符

ID:11045725

大小:30.00 KB

页数:6页

时间:2018-07-09

10重载双目运算符_第1页
10重载双目运算符_第2页
10重载双目运算符_第3页
10重载双目运算符_第4页
10重载双目运算符_第5页
资源描述:

《10重载双目运算符》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在(五)我们已经介绍了重载赋值运算符,这里就不重新说明了。一。作为类成员函数的重载为了能进行类对象和一个整型值的加法运算,需要写一个类的成员函数来重载双目加法(+)运算符。该函数在类中的声明如下:Dateoperator+(int)const;函数的声明指出,返回值是一个Date类对象,函数名是运算符+,只有一个整型参数,而且函数是常量型的。当编译器发现某个函数以加上前缀operator的真实运算符作为函数名,就会把该函数当作重载运算符函数来处理。如果在表达式中,该运算符的左边是一个类对象,右边是一个参数类型的一个对象,那么重载运算符函数就会被调用。调用形式如下:Datedt(6,9,200

2、5);dt=dt+100;也可以显式的调用重载运算符函数:dt.operator+(100);下面代码重载了双目加法运算符来计算一个整数和一个Date类对象之和,并且返回Date类对象。#includeiostream.hclassDate{intmo,da,yr;staticintdys[];public:Date(intm=0,intd=0,inty=0){mo=m;da=d;yr=y;}voiddisplay()const{cout<

3、1,30,31,30,31};DateDate::operator+(int)const{Datedt=*this;n+=dt.da;while(n>=dys[dt.mo-1]){n-=dys[dt.mo-1];if(++dt.da==13){dt.mo=1;dt,yr++;}}dt.da=n;returndt;}intmain(){Dateolddate(1,1,2005);Datenewdate;newdate=olddate+100;newdate.display();return0;}二。非类成员的运算符重载在重载运算符的原则中说到,要保持运算符的可交换性。而上面的程序只允许Date

4、类对象在运算符的左边而整型值在右边,不支持下面的语句:Datenewdate=100+olddate;所以,仅仅靠一个类的成员重载运算符是无法实现上面功能的。对重载双目运算符的类成员函数来说,总是认定调用函数的对象位于运算符左边。不过,我们可以再写一个非类成员的重载运算符函数,可以规定Date类的对象在运算符右边,而别的类型在运算符左边。例如,我们可以这样在类的外部定义一个函数:Dateoperator+(intn,Date&dt)下面代码在原先的基础上增加了一个非类成员函数来实现双目加法运算符的重载。#includeiostream.hclassDate{intmo,da,yr;stati

5、cintdys[];public:Date(intm=0,intd=0,inty=0){mo=m;da=d;yr=y;}voiddisplay()const{cout<=dys[dt.mo-1]){n-=dys[dt.mo-1];if(++dt.da==13){dt.mo=1;dt,yr++;

6、}}dt.da=n;returndt;}Dateoperator+(intn,Date&dt){returndt+n;}intmain(){Dateolddate(1,1,2005);Datenewdate;newdate=olddate+100;newdate.display();return0;}上面的例子中非类成员重载运算符函数调用了类中的重载+运算符来实现加法运算。如果类当中没有提供这样的函数,那么非类成员的重载运算符函数将被迫访问类的私有数据来实现加法运算。这样的话,需要把这个函数声明为类的友元,如下:classDate{friendDateoperator+(intn,Date&

7、);};上例中重载运算符函数声明了全部两个参数,这是因为它不是类的成员,因此它不能作为类的成员函数被调用,就缺少了一个隐含的参数。第一个重载加法运算符函数也可以用类的友元函数来实现。作为一种约定,这通常把所有为类重载的运算符都设定为该类的友元。例子中只给出了重载加法的代码,我们同样可以来重载减法,乘除法等等。三。重载关系运算符如果想要对两个日期进行比较,比如出现下面这样的代码:if(olddate可以向上面用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。