求学快递网是国内领先的B2M2C教育培训网上信息平台!

首页 | 分站加盟 | 课程发布 | 最新课程 | 最新机构 | 培训专题 | 全国分站 | 帮助中心

计算机等级考试_计算机等级考试报名_计算机考试成绩查询_求学快递网

计算机等级考试一步到位
您的位置:求学快递网 > 计算机等级考试 > 考试辅导 > 计算机二级 > 计算机C++知识点:非类成员的运算符重载 - 正文内容

计算机C++知识点:非类成员的运算符重载

计算机C++知识点:非类成员的运算符重载

 

求学快递网计算机等级考试专题重点推荐:2016年计算机级考试报考时间 2016年计算机二级考试证书领取时间2016年计算机二级考试报考指南2016年计算机二级考试大纲2016年计算机二级考试政策2016年计算机二级考试报考条件2016年计算机二级考试科目等最新新闻资讯。

 

       二、非类成员的运算符重载

  在重载运算符的原则中说到,要保持运算符的可交换性。而上面的程序只允许Date类对象在运算符的左边而整型值在右边,不支持下面的语句:

   Date newdate=100+olddate;

  所以,仅仅靠一个类的成员重载运算符是无法实现上面功能的。对重载双目运算符的类成员函数来说,总是认定调用函数的对象位于运算符左边。不过,我们可以再写一个非类成员的重载运算符函数,可以规定Date类的对象在运算符右边,而别的类型在运算符左边。例如,我们可以这样在类的外部定义一个函数:

   Date operator + (int n,Date & dt)

  下面代码在原先的基础上增加了一个非类成员函数来实现双目加法运算符的重载。

   #include iostream.h

   class Date

   {

   int mo,da,yr;

   static int dys[];

   public:

   Date(int m=0,int d=0,int y=0)

   { mo=m; da=d; yr=y;}

   void display() const

   { cout < Date operator + (int) const;

   };

   int Date::dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

   Date Date::operator+(int) const

   {

   Date dt=*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;

   return dt;

   }

   Date operator + (int n,Date & dt)

   {

   return dt+n;

   }

   int main()

   {

   Date olddate(1,1,2005);

   Date newdate;

   newdate=olddate+100;

   newdate.display();

   return 0;

   }

  上面的例子中非类成员重载运算符函数调用了类中的重载+运算符来实现加法运算。如果类当中没有提供这样的函数,那么非类成员的重载运算符函数将被迫访问类的私有数据来实现加法运算。这样的话,需要把这个函数声明为类的友元,如下:

   class Date

   {

   friend Date operator + (int n,Date &);

   };

  上例中重载运算符函数声明了全部两个参数,这是因为它不是类的成员,因此它不能作为类的成员函数被调用,就缺少了一个隐含的参数。

  第一个重载加法运算符函数也可以用类的友元函数来实现。作为一种约定,这通常把所有为类重载的运算符都设定为该类的友元。

  例子中只给出了重载加法的代码,我们同样可以来重载减法,乘除法等等。

 

 

 

关注求学快递网计算机等级考试专题,帮你了解最新的2016年计算机二级考试资讯服务2016计算机二级考试成绩查询,让你轻松备考计算机等级考试!

求学快递网计算机等级考试专题的小编们根据网民搜索喜爱,第一时间公布2016年计算机二级模拟试题2016年计算机二级考试应试技巧计算机二级考试历年真题2016年计算机二级考试章节复习供广大求学爱好者学习使用,欢迎继续关注求学快递网计算机等级考试专题,并给我们提供宝贵的意见!

 

相关推荐

计算机等级考试最新机试技巧
计算机等级考试高效利用技巧

最新计算机资讯

热点专题

计算机等级考试经验技巧分享

关于本站  诚征英才  广告服务  招生服务  免责声明  分站加盟  VIP会员  联系我们  网站地图  网站记事

版权所有 CopyRight 2008-2017 粤ICP备14009694号 www.studyems.com, Inc. All Rights Reserved
违法和不良信息举报邮箱:2881796407@qq.com 举报电话: