Chinaunix首页 | 论坛 | 博客
  • 博客访问: 481894
  • 博文数量: 72
  • 博客积分: 1851
  • 博客等级: 上尉
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-16 17:50
文章分类

全部博文(72)

文章存档

2013年(1)

2012年(17)

2011年(51)

2010年(3)

分类: C/C++

2011-05-08 15:35:59


C++中,重载与普通函数有两个区别:

  1. 语法不同,如果运算符处于两个参数之间或者参数之后,那么它将会被调用。

  2. 编译器决定哪个函数将会被调用,例如:如果使用浮点加运算,那么编译器就会调用执行浮点加法运算函数,如果一个参数为整型,编译器会调用一个特殊的函数来将整型转换为浮点型。

  3. 有些重载函数必须为成员函数,有些可以是成员函数或者友元函数

C++中,可能定义一个新的操作符在类之间进行操作,这些操作就像正常函数定义一样,出了在操作符之前加上关键字operator,一样,编译器会自动决定类型的转换来调用定义的操作符重载。

C++重载语法:

大致定义的语法为:operator @,@就为被重载的运算符,重载的参数列表依赖于下面两个因素:

  1. 是否为一元运算符(一个参数)还是二元运算符(两个参数)

  2. 是否定义的是全局函数(一元运算符一个参数,二元运算符两个参数operator@(a,b)),还是成员函数(一元操作符无参数,二元操作符一个参数-这样对象就成为了左参数a.operator@(b))

  1.   1 #include <iostream>
  2.   2 using namespace std;
  3.   3 class Integer
  4.   4 {
  5.   5 int i;
  6.   6 public:
  7.   7 Integer(int ii):i(ii){}
  8.   8 const Integer operator+(const Integer& rv)const
  9.   9 {
  10.  10 cout<<"operator + rv.i:"<<rv.i<<endl;
  11.  11 return Integer(i+rv.i);
  12.  12 }
  13.  13 Integer& operator+=(const Integer& rv){
  14.  14
  15.  15 cout<< "operator++ rv.i:"<<rv.i <<endl;
  16.  16 i +=rv.i;
  17.  17 return *this;
  18.  18 }
  19.  19 };
  20.  20 int main()
  21.  21 {
  22.  22 cout<<"built-in types:"<<endl;
  23.  23 int i=1,j=2,k=3;
  24.  24 k += i+j;
  25.  25 cout<<"user-defined types:"<<endl;
  26.  26 Integer ii(1),jj(2),kk(3);
  27.  27 kk += ii+jj;
  28.  28 return 0;
  29.  29 }

编译运行:

  1. built-in types:
  2. user-defined types:
  3. operator + rv.i:2
  4. operator++ rv.i:3

当对象作为形参进行传递时,类的成员函数是可以访问对象私有成员变量。

1.至于函数参数如果不对其进行修改就定义为const类型。

2.如果函数是类成员就可以定义为const类成员

3.返回类型的选择取决于重载操作符的类型,如果返回对象则可以进行返回临时性对象,这样不失为性能优化。


阅读(1227) | 评论(0) | 转发(0) |
0

上一篇:C++ copy-constructor

下一篇:fuse通信协议分析

给主人留下些什么吧!~~