全缺省参数
void TestFunc1(int a = 10,int b=20,int c=30) { cout << a <<" "<<b<<" "<<c<< endl; } int main() { TestFunc1(); TestFunc1(10,20,30); return 0; }半缺省参数 //规则:只能从右往左依次给默认参数,不能间隔着给。
void TestFunc2(int a, int b=20, int c = 30) { cout << a << " " << b << " " << c << endl; } int main() { TestFunc1(); TestFunc1(10, 30); return 0; }C语言中函数没有指定返回类型,会默认是int类型。 C++中则必须指定函数返回类型 C语言中函数没有参数,可以传递实参。 C++中函数没有参数,不可以传递实参,指定为void。 C语言不支持设置缺省参数,C++则可以。
在C语言中,我们如果想写两数相加,可能会这样写:
int Add(int left, int right) { return left + right; }但是,此时要计算两个double类型的数据相加的和,又不得不重新再这样写:
double Addd(double left, double right) { return left + right; }如果想计算其他类型的数据相加,还必须得再更改类型和函数名,写函数方法。。。因为函数名如果相同,编译器会报错,C语言不允许同一文件中函数名相同,这样就会很麻烦。
C++中提出了函数重载这一概念,方便了我们处理实现功能类似,数据类型不同的问题。
比如上面那个问题就可以这样解决:
int Add(int left, int right) { return left + right; } double Add(double left, double right) { return left + right; } int main() { Add(1, 2);//参数类型的推演:int Add(1.2, 3.2);//参数类型的推演:double return 0; }这样就形成了函数重载。
C语言对函数名字的修饰只是在名字前加了个_(_Add)。 C++对函数名字的修饰:// int -> ?Add@@YAHHH@Z // double -> ?Add@@YANNN@Z 正是因为C++保证函数名字不同,才能进行函数重载。
千万要注意不要让编译器左右为难
int Add(int a, int b,int c=10) { return a + b+ c; } int Add(int a, int b) { return a + b; } int main() { Add(1, 2);//编译器不知道该调用哪一个函数 Add(1,2,3);//正确 return 0; }