《Thinking in C++, 2nd Edition》笔记-第七章(Function Overloading & Default Arguments)

为什么需要函数重载。

大多数编程语言要求我们为每个函数设定一个唯一的标识符。如果我们想打印三种不同类型的数据:整型、字符型和实型,我们通常不得不用三个不同的函数名,如print _ int( )、print _ char( )和print _ float( ) ,这些既增加了我们的编程工作量,也给读者理解程序增加了困难。在C++中,还有一个重要原因需要我们对函数重载:构造函数。因为构造函数的名字是由类名确定的,所以只能有一个构造函数名。但是如果想用几种方法来创建一个对象时怎么办?函数重载的本质是允许函数同名。用不同的参数来调用构造函数。但是用返回值重载是被禁止的。

C + +中有一个很通用的作法叫缺省参数。缺省参数就是在用户调用一个函数时没有指定参数值而由编译器插入参数值的参数。这样f (“hello”) , f (“hi”, 1 )和f (“howdy”, 2 ,‘c’)可以
用来调用同一函数。它们也可能是调用三个已重载的函数,但当参数列表相同时,我们通常希望调用同一函数来完成相同的操作。

使用缺省参数时必须记住两条规则。第一,只有参数列表的后部参数才可是缺省的,也就是说,我们不可以在一个缺省参数后面又跟一个非缺省的参数。第二,一旦我们开始使用缺省参数,那么这个参数后面的所有参数都必须是缺省的。(这可以从第一条中导出。)缺省参数只能放在函数声明中,通常在一个头文件中。

void print(const char* msg=" ");

注意print( )函数有一个char *型的缺省参数。编译器在我们每次调用这个函数时都产生一个缺省的字符串吗?答案是否定的。它是在一个特定的保留区内产生一个单一的字符串作为静态全局数据,然后把这个字符串的地址作为缺省值传递给函数的。

函数重载和缺省参数为调用函数提供了方便,但有时会让人弄不清哪个函数会被调用。比如定义一个函数 int bits( int size = -1 );  在调用它不带参数时,它认为我们想得到位数(返回值),这会让人感觉不舒服。在bits()内部我们得按参数的值作一个判断,如果我们必须去找缺省值而不是作为一个普通值,根据这一点,我们就可以形成两个不同的函数,一个是在一般情况下的函数,一个是在缺省情况下的函数。我们也可以把它分割成两个不同的函数体,然后让编译器去选择执行哪一个,这可以提高一点效率,因为不需要传递额外的代码,由条件决定的额外代码也不会被执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值