💞💞 前言
hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
1. 缺省参数
1.1 缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
#include<iostream> using namespace std;//使用using namespace 命名空间名称引入C++标准 void Func(int a = 0) { cout<<a<<endl; } int main() { Func(); // 没有传参时,使用参数的默认值 Func(10); // 传参时,使用指定的实参 return 0; }
结果如下:
可以看到在定义
void Func(int a = 0)
时给int a 参数赋值为0;
所以当使用该函数时,如果不传参数:Func();
就默认传的参数为之前定义时赋值的0;
如果传参数:
Func(10);
就正常传参即可;
注意:
- 缺省参数不能在函数声明和定义中同时出现(写在声明中):
//a.h void Func(int a = 10); // a.cpp void Func(int a = 20) {} // 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
- 缺省值必须是常量或者全局变量;
- C语言不支持(编译器不支持)缺省参数;
1.2 缺省参数分类
- 全缺省参数
void Func(int a = 10, int b = 20, int c = 30) { cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl; }
全缺省参数就是指定义函数时将所有的参数都赋值
- 半缺省参数
void Func(int a, int b = 10, int c = 20) { cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl; }
半缺省参数就是指定义函数时将部分的参数赋值;
注意:半缺省参数必须从右往左依次连续来给出,中间不能有间隔;
2.函数重载
2.1函数重载概念
- 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
- 函数重载的优点是能够提高代码的可读性和可维护性。通过使用同一个函数名来表示一组相关的操作,可以让调用者更容易理解代码的意图,并且减少了代码的重复性。
- 函数重载的条件是函数名相同,但是参数列表不同。参数列表可以包括参数的个数、类型、顺序等方面的差异。在编译器中,通过函数的参数列表来区分同名的函数,并选择合适的函数进行调用。
例如:
#include<iostream> using namespace std; // 1、参数类型不同 int Add(int left, int right) { cout << "int Add(int left, int right)" << endl; return left + right; } double Add(double left, double right) { cout << "double Add(double left, double right)" << endl; return left + right; } // 2、参数个数不同 void f() { cout << "f()" << endl; } void f(int a) { cout << "f(int a)" << endl; } // 3、参数类型顺序不同 void f(int a, char b) { cout << "f(int a,char b)" << endl; } void f(char b, int a) { cout << "f(char b, int a)" << endl; } int main() { Add(10, 20); Add(10.1, 20.2); f(); f(10); f(10, 'a'); f('a', 10); return 0; }
结果如下:
可以看到虽然函数名相同,但是对应不同的参数会调用不同的函数
- 这里注意,相同类型的参数顺序调换不构成函数重载:
int Add(int left, int right) { cout << "int Add(int left, int right)" << endl; return left + right; } int Add(int right, int left) { cout << "int Add(int left, int right)" << endl; return left + right; }
结果如下:
- 当然如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。
2.2函数重载原因
- C语言不支持函数重载的主要原因是它的编译器在进行函数调用时是根据函数名来确定具体调用的函数的,在编译阶段就已经决定了函数的调用方式。而函数重载是指多个函数拥有相同的名称但具有不同的参数列表,编译器无法根据函数名来确定具体调用的函数。因此,C语言无法实现函数重载功能。
- 而C++是通过函数修饰规则来区分同名的函数,只要参数不同,修饰出来的名字就不一样,就支持了重载。
【C++入门】缺省参数、函数重载与引用(下);https://developer.aliyun.com/article/1496845