软件为visual studio2017,内容为C++学习笔记,以及相关的问题处理方法,目的是方便回顾和复习。
笔记来自于:黑马程序员C++教程。
一、函数的默认参数 1.语法
在C++中,函数的形参列表中的形参是可以由默认值的。
返回值类型 函数名(参数 = 默认值){}
2.示例
int func1(int a, int b, int c) {
return a + b + c;
}
int func2(int a, int b = 20, int c = 30)
{
return a + b + c;
}
int main() {
cout << func1(10,20,30) << endl;//60
cout << func2(10) << endl;//60
cout << func2(10, 30, 40) << endl;//80,对形参进行赋值。
system("pause");
return 0;
}
3.注意事项
1、如果某个参数已经有了默认参数,那么从这个位置往后,从左到右必须有默认值。 2、如果函数声明有默认参数,函数实现就不能有默认参数声明和实现只能有一个默认参数
//注意事项
//1、如果某个参数已经有了默认参数,那么从这个位置往后,从左到右必须有默认值
//错误示例:
//int func3(int a = 10; int b, int c) {}
//2、如果函数声明有默认参数,函数实现就不能有默认参数
//声明和实现只能有一个默认参数
int func4(int a, int b);
//int func4(int a=10,int b=10);声明与实现不能同时有默认参数,不然
int func4(int a = 10, int b = 10) {
return a + b;
}
二、函数的占位参数
1.定义
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
2.语法返回值类型 函数名(数据类型){}
3.示例
void funz(int a, int) {
cout << "this is funz" << endl;
}
//占位参数 还可以有默认参数
void funz1(int a, int = 10) {
cout << "this is funz1" << endl;
}
int main() {
funz(10, 10);//占位参数没有默认值,就必须进行填补占位参数
funz1(10);//有默认参数就可以只传递1个参数
sytem("pause");
return 0;
}
三、函数的重载
1.基本语法
- 作用
作用:函数名可以相同,提高复用性。
- 函数重载满足条件
1.同一个作用域下 2.函数名相同 3.两个函数的参数**类型**不同或者**个数不同**或者**顺序不同**才可以。2.理解
- 简单的讲,两个函数的作用域相同,名字相同,里面的参数****必须不同才能进行复用,重新载入使用。
void funcz01() {
cout << "funcz01的调用" << endl;
}
void funcz01(int a) {
cout << "funcz01(int a)的调用" << endl;
}
void funcz01(double a) {
cout << "funcz01(double a)的调用" << endl;
}
void funcz01(int a, double b) {
cout << "funcz01(int a, double b)的调用" << endl;
}
void funcz01(double a,int b) {
cout << "funcz01(int b, double a)的调用" << endl;
}
函数的返回值不能作为函数的返回条件
//int funcz01(double a, int b) {
// cout << "funcz01(int b, double a)的调用" << endl;
//}
int main() {
funcz01();
funcz01(10);
funcz01(3.14);
funcz01(10,5.20);
funcz01(5.20, 10);
system(“pause”);
return 0;
}
三、函数重载的注意事项
1.引用作为重载的条件
//(1)引用作为重载的条件
void func(int &a) {
//int &a = 10;不合法,引用必须使用一个合法的内存空间,栈区或者堆区,不能是常量区
cout << "func(int &a)调用" << endl;
}
void func(const int &a) {
//const int &a = 10;加上const相当于编译器进行了优化,创建了临时变量temp,
//int temp = 10; int &a = temp;
cout << "func(const int &a)调用" << endl;
}
//(2)函数重载碰到默认参数
void func2(int a, int b = 10) {
cout << "func2(int a,int b)的调用" << endl;
}
void func2(int a) {
cout << "func2(int a)的调用" << endl;
}
int main() {
int a = 10;
func(10);//输出"func(int &a)调用"
func(20);//输出"func(const int &a)调用"
//func2(10);//当函数重载碰到默认参数,出现二义性,报错,尽量避免这样的情况。
system("pause");
return 0;
}
2.小结
- 引用作为重载条件,要注意加上const可以直接传入常量。
- 函数重载要尽量避免添加默认参数,涉及到函数重载就不要添加默认参数。
总结
本章主要对函数的默认参数、占位参数、重载进行了说明。



