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;
}


 

 

 

原创粉丝点击