C++基础知识学习笔记(5)——函数

学习参考:https://www.bilibili.com/video/BV1et411b73Z?p=95&spm_id_from=pageDriver&vd_source=cc561849591f6a210152150b2493f6f3

函数

函数的默认参数

可以为形参提供默认值。

int add(int a, int b = 1, int c = 2) {
	return a + b + c;
}
int main()
{
	cout << (add(1, 3, 4)) << endl;//8
	cout << (add(1, 3)) << endl;//6
	cout << (add(1)) << endl;//4
	return 0;
}

注意:

  1. 默认参数后面的形参,也必须提供默认参数。
  2. 如果函数声明有默认参数,那么函数实现就不能有默认参数。
    声明、实现只能有一处有默认参数,不能都有否则会有歧义。

声明时有默认参数:

int add(int a, int b = 1, int c = 2);
	int add(int a, int b, int c) {
	return a + b + c;
}

实现时有默认参数:

int add(int a, int b, int c);
	int add(int a, int b = 1, int c = 2) {
	return a + b + c;
}

函数占位参数

形参列表里可以有占位参数,用来占位,调用时必须提供对应的值来填补该位置。

下面代码中形参列表中第三个int是用来占位的。调用时必须传递一个int值。

int add(int a, int b, int){
	return a + b;
}
int main()
{
	cout << (add(1, 3, 4)) << endl;//8
	return 0;
}

占位还可以有默认值,调用的时候就不用传参了:

int add(int a, int b, int = 100){
	return a + b;
}
int main()
{
	cout << (add(1, 3)) << endl;//8
	return 0;
}

函数重载

作用:函数名可以相同,提高复用性。

函数重载需要满足的条件:

  • 同一个作用域下
  • 函数名相同
  • 形参类型、个数、顺序等至少有一处不同(否则无法区分两个函数了)

函数重载注意事项:

  1. 引用作为重载的条件时
  • 值传递和引用传递可能会产生歧义(定义没问题,但调用时报错):
void func(int& a) {
	cout << "int & a" << endl;
}
void func(int a) {
	cout << "int a" << endl;
}
  • 引用传递和引用常量之间不会产生歧义:
void func(int& a) {
	cout << "int & a" << endl;
}
void func(const int& a) {
	cout << "const int& a" << endl;
}
int main()
{
	int a = 9;
	func(a);//"int & a"
	func(10);//"const int& a"
	return 0;
}
  • 值传递和引用常量之间会产生歧义(调用时报错):
void func(int a) {
	cout << "int a" << endl;
}
void func(const int& a) {
	cout << "const int& a" << endl;
}
  1. 函数重载碰到函数默认参数时可能会产生歧义。
posted @ 2024-05-25 17:35  greencode  阅读(7)  评论(0编辑  收藏  举报