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;
}
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;
}
相关文章推荐
- 微信支付开发demo文件是干什么的简单说明
- 时间比较问题 举一个简单例子说明:比如一个论坛对当天发表的贴子用new图片标记一下
- 简单的MDX案例及说明(2)
- 简单说明什么是递归,什么情况下会使用递归,并写一个简单的递归程序。
- 在此说明一下什么是AJAX,并解释AJAX的初步概念...
- java方法重载原理,案例说明
- mapreduce简单通俗案例,mapreduce具体是什么
- 从一个简单的WEB项目入手来简单地了解一下什么是Spring之持久层(Dao)
- Spring AOP详解 一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博
- 简单说明什么是递归,什么情况下会使用递归,并写一个简单的递归程序。
- 简单认识一下什么是闭包
- 实现复数类中的加运算符重载【C++运算符重载】
- 简单说一下Nginx配置说明
- 简单的,独立却互联的东西 【思考一下我们想看什么网站,他们要做什么网站】
- 简单的MDX案例及说明(3)
- 简单说明一下JS中的函数声明存在的“先使用,后定义”
- 简单说明什么是递归,什么情况下会使用递归,并写一个简单的递归程序。
- 属性重载的简单说明
- 用了N年的接口,你知道接口是什么吗?——一个简单实例说明接口的伟大意义
- C# List深拷贝和浅拷贝的简单案例说明