C++学习日记 Day3:函数高级(默认参数、占位参数、函数重载)

发布时间:2026/9/23 7:21:34
C++学习日记 Day3:函数高级(默认参数、占位参数、函数重载) ## 今天学了什么今天学习C函数默认参数、占位参数及函数重载的语法和规则。## 函数的默认参数函数形参列表的形参可以有默认值语法 返回类型 函数名参数默认值{}。#includeiostream using namespace std; //函数的默认参数 int func(int a, int b 10,int c20) { return a bc; } //默认参数声明实现只能有一个 如果在实现里实现必须在main函数前面 int func02(int a, int b); int func02(int a 10, int b 1) { return a b; } int main() { cout func 的运行结果 func(1,1,1)endl; cout func02 的运行结果 func02() endl; return 0; }通过对上述代码进行调试发现- 设置默认参数后传入新值会替换默认值不传入新值则会使用默认值- 默认参数后面的参数也必须有默认值前面没有。即默认参数必须从右往左连续定义否则会报错- 函数声明有默认参数则函数实现就不能有默认参数反正也是。并且如果默认参数在实现函数的实现必须在main函数前否则默认参数设置无效。## 函数的占位参数语法返回值类型 函数名数据类型{}参数只有类型不写变量名作用是占位调用函数时必须填补该位置占位参数可以设置默认值。int func03(int a, int) //占位参数可以有默认值 例int func03(int a, int10){a a 1;return a;}## 函数重载** 作用同一个作用域下函数名可以相同依靠参数区分函数提高复用性。**** 函数重载条件**同一个作用域同一个函数名函数参数的类型不同/个数不同/顺序不同。**重点函数的返回值不同不能作为重载条件原因调用函数时编译器只看传入参数可以不接收返回值编译器无法仅靠返回值区分调用函数。**#includeiostream using namespace std; int func(int a, int b ,int c) { return a b c; } //函数重载 类型不同 int func(float a) { return a 100; } //函数重载 个数不同 int func(int a, int b) { return a 2 b; } //函数重载 顺序不同 int func(int a, double b) { return a * b; } int func(double a, int b) { return a / b; } int main() { cout func 的运行结果 func(1,1,1)endl; cout func 重载函数的运行结果 func((float)1.0) endl; return 0; }## 引用作为重载条件当函数参数为引用时也有可重载的情况int a 和 const int a 可以构成重载传入变量左值调用void func04(int a);传入常量、字面量调用void func04(const int a);//引用作为重载条件 void func04(int a) { cout func(int a)调用 endl; } void func04(const int a) { cout func(const int a)调用 endl; } int main() { int i1; func04(i);//输出结果func(int a)调用 func04(2);//输出结果func(const int a)调用 return 0; }## 发现函数重载遇到默认参数坑二义性例①void funcint a,int b10{}②void func (int a) {}func(1);虽然满足函数重载的条件-参数个数不同但运行依旧错误。原因编译器在调用时发现①②两个 函数都能调用存在二义性导致运行出错。