什么叫函数的默认形参?就是说函数的形式参数可以给它默认值。比如:
voidprint(charch,intn=1);
这个print函数的第二个形参n,我们给了它一个默认值,这里是1。当我们调用这个函数的时候,对于有默认值的形参n,可以给它提供值,也可以不给它提供值。
关于默认形参,有这样的规定:默认形参必须在非默认形参的右边,即一律靠右。比如
add(x=1,y,z=2);//错误
add(y,x=1,z=2);//正确
那什么叫函数重载呢?C++允许同一个作用域里面有多个同名的函数,只要它们的形参列表不同(形参类型或者形参个数不同)就行了。比如:
intadd(intx,inty);
doubleadd(doublex,doubley);
虽然这两个函数的函数名都叫add,但他们的形式参数类型不一样。所以,以上两个函数在同一个作用域,是完全可以同时存在的。将来我们调用add函数的时候,就根据实际参数的类型来决定。
函数名和形参列表整个构成了函数的签名这个概念。也就是说函数重载是根据函数签名来区分不同的函数的。函数重载不能根据返回类型区分函数。比如
intadd(intx,inty);
doubleadd(intx,inty);
这两是完全同样的函数,虽然函数的返回值类型不一样,但函数签名相同。