c++运算符重载简单案例,说明一下什么是运算符重载
来源:互联网 发布:大革命和枭雄优化 编辑:程序博客网 时间:2024/05/29 08:30
引入运算符重载的原因例如:
int a=1,b=2;
float c=1.1,d=2.4;
int e=a+b;
float f=c+d;
float g=f+e;
为什么同一个运算符“+”可以用于完成不同类型的数据的加运算呢?
原来C++语言针对预定义数据类型已经对某些运算符做了适当的重载。
C++语言提供的预定义数据类型终究是有限的,我们在解决多种多样的实际问题时,
往往需要使用许多的自定义数据类型。
例如,在解决科学与工程计算问题时,
往往要使用复数、矩阵等下面定义一个简化的复数类
complexclass complex
{
public:double real,imag;
complex(double r=0,double i=0)
{
real=r,imag=i;
}
}
void main()
{
complex com1(1.1,2.2),com2(3.3,4.4),total;
total=com1+com2; //错误//…
return 0;
}
运算符重载的规则重载运算符与预定义运算符的使用方法完全相同,
被重载的运算符不改变原来的操作数个数、优先级和结合性。
重载的运算符只能是运算符集中的运算符,不能另创新的运算符。
运算符的含义可以改变,但最好不改变。
如实数的加法运算可以用乘法运算符来实现在C++中,
大多数系统预定义运算符可以把被重载,
但也有些运算符不能被重载如:
类属关系运算符“.”、成员指针运算符“*”、作用域分辨符“::”、sizeof运算符和三目运算符“?:”
不能改变运算符对预定义类型的操作方式
运算符重载例子:
#include<iostream>
using namespace std;
class Point
{
private :
float x,y;
public:
Point(float xx,float yy)
{
x=xx;
y=yy;
}
float get_x()
{
return x;
}
float get_y()
{
return y;
}
Point operator ++(); //重载前置运算符++;
Point operator --(); //重载前置运算符--;
};
Point Point::operator ++()
{
if(x<640)
++x;
if(y<480)
++y;
return * this;
}
Point Point::operator --()
{
if(x>0)
--x;
if(y>0)
--y;
return * this;
}
int main()
{
int i=0;
Point p1(10,10);//声明point类的对象
Point p2(200,200);
for(i=0;i<5;i++)
{
cout<<"p1:x="<<p1.get_x()<<endl;
++p1;
}
for(i=0;i<5;i++)
{
cout<<"p2:x="<<p2.get_x()<<endl;
--p2;
}
return 0;
}
- c++运算符重载简单案例,说明一下什么是运算符重载
- 运算符重载案例
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- js简单的文本编辑器(所见即所得)
- C# 自定义类型实现foreach 迭代
- 从事前端开发必须要了解的CSS原理
- 生男生女的面试题
- Lucene学习——初探搜索引擎
- c++运算符重载简单案例,说明一下什么是运算符重载
- objective-c与java的几点不同 (转)
- OpenGL学习之路
- HDOJ 4069 Squiggly Sudoku 精确覆盖+搜索
- C#第四周 任务4.1 创建学生类
- Java集合Map接口学习
- apache安装问题:update-rc.d: using dependency based boot sequencing
- java小练习(一个数如果恰好等于它的因子之和,这个数就称为“完数”。编写应用程序,求1000之内的所有完数。)
- 《帝国时代》共同创始人TonyGoodman携新游转向移动市场