C++运算符重载

  在C++中,运算符和函数一样,也可以重载,使它们能够完成和创建与类有关的特殊操作。运算符重载时,不会失去它原来的意义;相反,它适用的对象类型得到了拓宽。与函数的重载和虚函数一样,运算符重载也从一个方面体现了多态性。

  运算符重载是C++最强大的功能之一。在重载了合适了运算符之后,就可以在表达式中使用对象,就像使用C++的基本数据类型一样。运算符重载也形成了C++ I/O方法的基础。

  通过创建运算符函数,可以重载运算符。运算符函数定义了重载运算符将要执行的操作,该操作与其作用对象有关。运算符函数使用operator创建,operator()函数的一般形式如下:

  <类型> <类名>::operator<操作符> (<参数表>){...}

  其中,“类型”为函数的返回值类型,即运算符的运算结果值的类型;“类名”为该运算符重载所属类的类名;而“操作符”即所重载的运算符,可以是C++中除了“::”"、"“.”"*"(访问指针内容的运算符,与该运算符同形的指针说明运算符和乘法运算符允许重载)和“?:”以外的所有运算符。

  下面是一个具体的实验例子。

  

实验内容:

根据已有的Circle类:

              Circle

-radius:double

+Circle()

+Circle(radius:double)

+getRadius():double

+setRadius(radius:double):void

+getArea():double

 

 

 

 

 

 

 

 

 

 在程序清单给出的Circle类中实现关系运算符(<,<=,==,!=,>,>=),实现按半径对Circle对象排序。

源代码

Circle.h

#ifndef CIRCLE_H

#define CIRCLE_H

class Circle

{

       doubleradius;

public:

       Circle();

       Circle(double_radius);

       doublegetRadius();

       voidsetRadius(double _radius);

       doublegetArea();

       booloperator<(Circle x);

       booloperator<=(Circle x);

       booloperator==(Circle x);

       booloperator!=(Circle x);

       booloperator>(Circle x);

       booloperator>=(Circle x);

};

#endif

Circle.cpp

#include"Circle.h"

 

Circle::Circle()

{

       radius=0;

}

 

Circle::Circle(double _radius)

{

       radius=_radius;

}

 

double Circle::getRadius()

{

       returnradius;

}

 

double Circle::getArea()

{

       returnradius*radius*3.14;

}

 

void Circle::setRadius(double _radius)

{

       radius=_radius;

}

 

bool Circle::operator <(Circle x)

{

       if(radius<x.getRadius())

              returntrue;

       else

              returnfalse;

}

 

bool Circle::operator <=(Circle x)

{

       if(radius<=x.getRadius())

              returntrue;

       else

              returnfalse;

}

 

bool Circle::operator ==(Circle x)

{

       if(radius==x.getRadius())

              returntrue;

       else

              returnfalse;

}

 

bool Circle::operator !=(Circle x)

{

       if(radius!=x.getRadius())

              returntrue;

       else

              returnfalse;

}

 

bool Circle::operator >(Circle x)

{

       if(radius>x.getRadius())

              returntrue;

       else

              returnfalse;

}

 

bool Circle::operator >=(Circle x)

{

       if(radius>=x.getRadius())

              returntrue;

       else

              returnfalse;

}

Main.cpp

#include<iostream>

#include"Circle.h"

using namespace std;

int main()

{

       doubler1,r2,r3,r4,r5;

       Circlemincircle;

       cout<<"请输入5个圆的半径:"<<endl;

       cin>>r1>>r2>>r3>>r4>>r5;

       Circlecircle1;

       Circlecircle2;

       Circlecircle3;

       Circlecircle4;

       Circlecircle5;

       circle1.setRadius(r1);

       circle2.setRadius(r2);

       circle3.setRadius(r3);

       circle4.setRadius(r4);

       circle5.setRadius(r5);

       Circlecircle[]={circle1,circle2,circle3,circle4,circle5};

       for(inti=0;i<5;i++)

       {

              mincircle=circle[i];

              for(intj=i+1;j<5;j++)

              {

                     if(circle[j]<mincircle)

                     {

                            circle[i]=circle[j];

                            circle[j]=mincircle;

                            mincircle=circle[i];

                     }

              }

       }

 

       cout<<"这5个圆的半径从小到大依次为:"<<endl;

       for(intk=0;k<5;k++)

       {

              cout<<circle[k].getRadius()<<"  ";

       }

       return0;

}

  从以上例子及讲解中我们大概可以了解了C++运算符重载的基本方法,这将对我们的编码带来很大的方便。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值