#include<iostream>voidFunc(int a = 10, int b = 20, int c = 30){
std::cout << a << " " << b << " " << c << std::endl;
}
intmain(){
Func(); // 所有参数都不传,使用缺省值Func(1); // 只传第一个Func(1, 2); // 只传前两个return0;
}
既然是全缺省,那是不是可以所有参数都不传进去?确实可以。这时候又有读者可能会问,能不能只传部分参数的值进去?比如只传第一个和第三个?写成 Func(a, , c) 显然是不行的,因为在制定语法的时候这是不被允许的。如果我们真的只想传第一个和第三个的值,可以调换一下位置:
#include<iostream>voidFunc(int a = 10, int c = 30, int b = 20){
std::cout << a << " " << b << " " << c << std::endl;
}
intmain(){
Func(1, 3); // 只传入 a 和 c 的值return0;
}
这样一来,只有 a 和 c 的值被修改了。需要注意的是,在传入值的时候,只能从左向右依次传值,不能跨越地、间隔跳跃地传值。
#include<iostream>voidFunc(int a, int b, int c = 10){
std::cout << a << " " << b << " " << c << std::endl;
}
intmain(){
Func(1, 2); // 必须传入前两个参数return0;
}
如果想要让两个参数缺省,那就这样子写:
#include<iostream>voidFunc(int a, int b = 20, int c = 10){
std::cout << a << " " << b << " " << c << std::endl;
}
intmain(){
Func(1); // 只传入 areturn0;
}
在 C 语言中,我们经常碰到这样的问题:写很多个功能相同的函数但是命名却不能相同,这样就导致了程序员在编写代码时的效率大幅度降低。而 C++ 的函数重载就是为了解决这个问题。
函数重载的定义
C++ 支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样 C++ 函数调用就表现出了多态行为,使用更灵活。C 语言是不支持同一作用中出现同名函数的。
#include<iostream>// 参数类型不相同intadd(int a, int b){
std::cout << "int (a+b) " << a + b << std::endl;
return a + b;
}
doubleadd(double a, double b){
std::cout << "double (a + b) " << a + b << std::endl;
return a + b;
}
// 参数个数不相同intadd2(int a, int b, int c){
std::cout << "int (a + b + c) " << a + b + c << std::endl;
return a + b + c;
}
intadd2(int a, int b, int c, int d){
std::cout << "int (a + b + c + d) " << a + b + c + d << std::endl;
return a + b + c + d;
}
// 参数类型顺序不同voidadd3(int a, double b){
std::cout << "int a, double b" << std::endl;
}
voidadd3(double b, int a){
std::cout << "double b, int a" << std::endl;
}
intmain(){
int a = 10, b = 20, c = 30, d = 40;
double a2 = 1.2, b2 = 2.2;
add(a, b);
add(a2, b2);
add2(a, b, c);
add2(a, b, c, d);
return0;
}