重载和缺省参数
什么是重载?
重载简单来说就是依次多义。所谓函数重载是指同 一个函数名可以对应着多个函数的实现
为什么要重载?
主要是两个原因:
1. 不想使用printf_int(), printf_char(), printf_float() 来打印不同数据类型的字符。类似这样的问题,可以使用重载来解决。
2. 构造函数
因为构造函数的名字预先由类的名字确定,所以只 能有一个构造函数名。但如果我们想用几种方法来创建一个对象时该怎么办呢?例如创建一个类,它可以用标准的方法初始化,也可以从文件中读取信息来初始化, 我们就需要两个构造函数,一个不带参数(缺省构造函数),另一个带一个字符串作为参数,
以表示用于初始化对象的文件的名字。所以函数重 载的本质就是允许函数同名。在这种情况下,构造函数是以不同的参数类型被调用的。
重载的实质?
其实是在编译的时候,函数名会被转换成如下的格 式进行匹配:printf(int int)=>prinf_int()
为什么不用返回值重载?
因为使用者可以不处理返回值,如下
void f()和int f()两个函数,使用者在调用的时候可以直接写成
f(),如果使用返回值重载,那么编译器将不知道该使用那个函数。
缺省参数为什么只能发在后面?
F(int i, int j, int k=1, int l=0) 为什么缺省参数要放在后面?
例如: f(int i, int j=0, int k, int l =0)不能处理 f(3, 4, 5),编译器无法判断哪个数缺省参数。
缺省参数只在说明的时候指出,定义处不重新定义,但通常要加一个注释.
问个小问题,在一个类中有下面两个函数
void add(int i=1) {cout << add(int i=1)<< endl;};
void add() {cout << add()<< endl;};
当使用add()时,会调用那一个?
结论是编译不能通过。