C++运算符重载
2014-06-05 10:25
260 查看
在C++中,运算符和函数一样,也可以重载,使它们能够完成和创建与类有关的特殊操作。运算符重载时,不会失去它原来的意义;相反,它适用的对象类型得到了拓宽。与函数的重载和虚函数一样,运算符重载也从一个方面体现了多态性。
运算符重载是C++最强大的功能之一。在重载了合适了运算符之后,就可以在表达式中使用对象,就像使用C++的基本数据类型一样。运算符重载也形成了C++ I/O方法的基础。
通过创建运算符函数,可以重载运算符。运算符函数定义了重载运算符将要执行的操作,该操作与其作用对象有关。运算符函数使用operator创建,operator()函数的一般形式如下:
<类型> <类名>::operator<操作符> (<参数表>){...}
其中,“类型”为函数的返回值类型,即运算符的运算结果值的类型;“类名”为该运算符重载所属类的类名;而“操作符”即所重载的运算符,可以是C++中除了“::”"、"“.”"*"(访问指针内容的运算符,与该运算符同形的指针说明运算符和乘法运算符允许重载)和“?:”以外的所有运算符。
下面是一个具体的实验例子。
实验内容:
根据已有的Circle类:
在程序清单给出的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::setR
4000
adius(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++运算符重载的基本方法,这将对我们的编码带来很大的方便。
运算符重载是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::setR
4000
adius(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++运算符重载的基本方法,这将对我们的编码带来很大的方便。
相关文章推荐
- C++运算符重载整理
- C++运算符重载和模板
- C++运算符重载需要注意的地方
- c++运算符重载(1)
- 20、C++运算符重载之输入输出运算符的重载
- C++运算符重载的方法
- C++运算符重载(二)
- C++运算符重载-上篇 (Boolan)
- C++运算符重载讲解与经典实例
- c++运算符重载的方法提要
- C++运算符重载规则详解
- C++运算符重载——输入/输出运算符
- 【转】C++运算符重载总结
- C++运算符重载讲解与经典实例
- 【C++】C++运算符重载-基础
- C++运算符重载探讨
- C++运算符重载笔记
- C++运算符重载(4) - 不能被重载的操作符
- YTU-OJ-实现复数类中的加运算符重载【C++运算符重载】
- OJ第三批——Problem A :实现复数类中的加运算符重载【C++运算符重载】