您的位置:首页 > 编程语言 > C语言/C++

c++运算符重载简单案例,说明一下什么是运算符重载

2012-09-19 23:48 323 查看
引入运算符重载的原因例如:

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐