C++函数重载与缺省参数的宏观理解

《c++编程思想》阅读笔记(7)

第5章 函数重载与缺省参数

总体 : 当我们创建一个对象(即变量)时,要为这个储存区取一个名字。一个函数就是一个操作的名字。正是靠系统描述各种各样的名字,我们才能写出易于人们理解和修改的程序。为了达到这个目的,函数重载理所当然地出现了。


1)自然语言中同一个词可以代表许多不同的含义,这要依靠上下文来确定,这就是所谓的一词多义——该词被重载了 。这点非常有用,特别是对于细微的差别。我们可以说“洗衣服, 洗汽车”, 如果非得说成“洗(洗衣服的洗)衣服, 洗(洗汽车的洗)汽车”,那将会十分滑稽。

2)然而大多数编程语言要求我们为每个函数设定一个唯一标识符,如果我们想打印三种不同类型的数据,我们可能会写print_int() , print_float(), printf_char(),这无疑加大了编程的工作量,而且降低了可读性。

3)在c++中,还有另外一个原因需要对函数名重载:构造函数,因为构造函数的名字是预先由类的名字确定的,所以只能有一个构造函数名。所以我们需要函数重载来实现用几种不同的方法创建对象的情况。所以函数重载的本质就是允许函数同名。在这种情况下,构造函数是以不同的参数类型被调用的。

4)重载对其他函数也提供了很大的方便,包括非成员函数。另外,函数重载意味着,我们有两个库,它们都有一个同名的函数,只要它们的参数不同就不会发生冲突。

5)c++中不允许用返回值来进行重载,因为我们总是可以调用一个函数而忽略它的返回值。


6)缺省函数就是在用户调用一个函数时没有指定参数值而由编译器插入参数值的参数。这样f(“hello”), f(“hi”, 1), f(“howdy”, 2, ‘c’) 可以用来调用同一函数。当然它们也有可能是调用三个已重载的函数。

7)c++中的缺省参数就是在函数声明时已给定的一个值,如果我们在调用函数是没有指定这一参数的值,编译器就会自动地插上这个值。如我们可以把:

stash (int size);  // zero quantity
stash (int size, int quantity);

用一个函数声明来替代:

stash (int size, int quantity = 0);

这样,stash(int) 的定义就被简化了——所需要的只是一个单一额stash(int, int)定义。

8)缺省函数同函数重载一样,给程序员提供了很多方便,它们都使我们可以在不同的场合使用同一名字。。但是,如果函数之间的行为差异较大,用缺省参数就不合适了。

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

10)缺省参数只能放在函数声明中,通常放在一个头文件中,编译器必须在使用该函数之前知道缺省值。而且缺省参数可以让声明的参数没有标识符,这看上去很有趣,我们可以这样声明:

void f(int x, int = 0, float = 1.1);

小结:函数重载和缺省参数都为调用函数提供了方便。但是我们不能把缺省参数作为一个标志去决定执行函数的哪一块,这是基本原则。在这种情况下,只要能够,就应该把函数分解成两个或多个重载的函数。
缺省参数的应用是为了使函数调用更容易,特别是当这些函数的许多参数都有特定值时。它不仅能使书写函数调用更容易,而且阅读也更方便,尤其当用户是在制定参数的过程中,把那些最不可能调整的缺省参数放在参数表的最后面时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值