Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2969855
  • 博文数量: 412
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 7374
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-25 15:15
个人简介

学习是一种信仰。

文章分类

全部博文(412)

文章存档

2014年(108)

2013年(250)

2010年(11)

2009年(43)

我的朋友

分类: C/C++

2014-01-23 08:59:21

函数重载:同一个函数对应多个函数实现,这些函数名字相同,但是函数的参数个数或参数类型不同;

运算符重载:函数重载的特例;

例题解析:

----函数重载就是函数

 

重载与多态:

第一种说法:

重载是编译时多态,即静态多态,根据不同类型函数编译时会产生不同的名字如int_foochar_foo等等,以此来区别调用。

故重载仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于静态多态,而不是通过继承和虚函数实现的动态多态。

第二种说法:

重载只是一种语言特性,是一种语法规则,与多态无关,与面向对象也无关。

重载(overload)和多态无关,真正和多态相关的是覆盖(override)。 当派生类重新定义了基类的虚拟方法后,基类根据赋给它的不同的派生类引用,动态地调用属于派生类的对应方法,这样的方法调用在编译期间是无法确定的。因此,这样的方法地址是在运行期绑定的(动态绑定)。

有一个专门的名词--重写或重定义。重载与重写的区别就在于是否覆盖,重写一般多发生在不同的类且存在继承关系之间,而重载多是在一个类里或者一块代码段里。

 

在重载及函数模板重载里,编译器选择函数,要经过以下三步,这个过程称为重载解析。   

第一步:创建候选函数列表,其中包含有与被调函数名称相同的函数与模板函数。   

第二步:使用候选函数列表创建可行函数列表。这些都是参数数目正确的函数。   

第三步:确定是否有最佳可行的函数。如果有,则使用。   

确定最佳函数,只考虑其特征标,而不考虑返回类型(也无从考虑,但是要是硬想办法的话,也有,不过没有必要为了不必要的性能而浪费资源)。

确定最佳函数,匹配特征标要依次经过以下判断:

1)完全匹配(常规函数优于模板;允许无关紧要的转换)

2)提升匹配(如charshort自动转换为int

3)标准转换(int转换为charlong转换为double

4)用户自定义的转换(如类声明中定义的转换函数)。

 

C++中的重载

函数重载:   

函数重载就是函数名称相同,但定义却不同。

函数重载使得程序员可以将一系列的函数族定义为一个统一的界面,但是却可以处理不同类型数据或接受不同个数的参数。这实现了统一接口,不同定义的思想。   

流的重载:   

C++的流提取运算符>>和就插入运算符<<C++类库提供的输入输出(I/O)操作符。系统与定义了输入流类istream和输出流类ostreamcincout分别是istreamostream的对象。iostream头文件中已经对>><<进行了重载,使得它能用来输入/输出标准类型的数据。但如果是自己定义类型,就需要重载在这两个运算符,以便它们能输入/上岁数出该自定义类型。

格式如下:   流插入的重载:ostream &operator<<(ostream &,自定义类 &);   流提取的重载:istream &operator>>(istream &,自定义类 &);   

运算符的重载:   

运算符的重载就是对运算符的重新定义,即一个运算符可以用于多种数据类型的运算中。

运算符的重载在实际编程中使用很普遍,例如,“+”运算符既可以用于整数加,也可以用于浮点加,甚至是字符串的链接。

格式如下:   type operator sign (参数列表);

 

函数重载(function   overloading)  

允许多个函数共享同一个函数名,但是针对不同参数类型提供共同的操作.

使得程序更加简洁,具备更少的函数名,这是最主要的好处。

如果没有函数重载,完全不会影响代码的编写,只不过程序会变得不简洁,多一些函数名

 

好处:使用者只需使用一个函数名即可实现不同的功能,当然这些功能应该都是相近的

坏处:没有了编译时错误,使因手写出错的几率增加

 

----按寄达局生成路单,写在一个文件中,写成函数重载?

----无所谓了

----程序员最好抱这样的观点:并不是每个语言特性都是你要攀登的下一座山峰,使用语言的特性应该遵从应用的逻辑,而不是简单地因为它的存在就必须要使用它。

程序员不应该勉强使用重载函数,只有在必要的地方使用它们才会让人感觉自然

                                                                --《c++   primer   3rd

 

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

上一篇:C++中 using namespace std 详解

下一篇:TIBCO

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