1 函数的定义,调用,值传递
如果形参是引用类型,它将绑定到对应的实参上;
否则,将实参的值拷贝后赋给形参,函数对形参做的所有操作都不会影响实参。
函数有几个形参,就必须传入相同数量的实参,类型要与形参类型匹配。
#include <iostream>
#include<string>
#include<ctime>
using namespace std;
//返回类型 函数名(形参,形参)
//每个形参都要写上其类型
//返回值不能是数组类型或函数类型,但可以是指向数组或函数的指针
int add(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
//如果函数不需要返回值,声明时可以写void
//交换两个数
void swap(int num1, int num2) {
int temp = num1;
num1 = num2;
num2 = temp;
cout << num1 << num2 << endl;
//返回值不需要时,可以不写return
}
int main(){
int a = 10;
int b = 20;
int sum = add(a, b);
cout << sum << endl;
//当我们做值传递时,函数的形参改变,并不会影响实参
swap(a, b);//只是形参交换
cout << a <<" " << b << endl;//此时的实参还是没有交换
system("pause");
return 0;
}
2 函数的常见样式:
无参无返
有参无返
无参有返
有参有返
#include <iostream>
#include<string>
#include<ctime>
using namespace std;
//无参无返
void test01() {
cout << "01" << endl;
}
//有参无返
void test02(int a) {
cout << "02: " << a << endl;
}
//无参有返
int test03() {
cout << "03" << endl;
return 1000;
}
//有参有返
int test04(int a) {
cout << "04 " << a << endl;
return a;
}
int main(){
//无参无返函数调用
test01();
//有参无返函数调用
test02(1);
//无参有返函数调用
int num1 = test03();
cout << num1 << endl;
//有参有返函数调用
int num2 = test04(8000);
cout << num2 << endl;
system("pause");
return 0;
}
3 函数的声明
作用:告诉编译器函数名称以及如何调用函数,函数的实际主体可以单独定义
函数的声明可以多次,但函数的定义只能有一次
#include <iostream>
#include<string>
#include<ctime>
using namespace std;
//函数的声明
//提前告诉编译器函数的存在
int max(int a, int b);
int main(){
int num1 = 9;
int num2 = 10;
cout << max(num1, num2) << endl;
system("pause");
return 0;
}
int max(int a, int b) {
return a > b ? a : b;
}
4 函数的分文件编写
作用:让代码结构更加清晰
函数分文件编写一共有四个步骤:
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
swap.h(头文件):
需把框架写好
#include <iostream>
using namespace std;
//函数的声明
void swap(int num1, int num2);
swap.cpp(源文件)
需写上“#include “swap.h””
#include "swap.h"
//函数的定义
void swap(int num1, int num2) {
int temp = num1;
num1 = num2;
num2 = temp;
cout << num1 << num2 << endl;
}
如果在另一个文件中使用:
需写上“#include “swap.h””
#include "swap.h"
int main(){
int a = 9;
int b = 10;
swap(a, b);
system("pause");
return 0;
}
5 函数默认参数
函数的形参列表中是可以有默认值的
语法:返回值类型 函数名 (参数=默认值)
int fun(int a, int b = 20, int c = 30) {
return a + b + c;
}
int main() {
//如果我们自己传入数据,就用自己的数据,如果没有,就用默认值
cout << fun(10,30) << endl;
system("pause");
return 0;
}
//如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
int fun2(int a, int b = 10 ,int c) {//错误
return a + b + c;
}
声明和实现只能有一个有默认参数
//如果函数声明有默认参数,函数实现就不能有默认参数
int fun(int a, int b = 10, int c = 10);//如果函数声明中有默认参数
int fun(int a, int b, int c ) {//函数实现中就不能有
return a + b + c;
}
6.函数占位参数
函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该占位
语法:返回值类型 函数名 (数据类型){}
```cpp
void fun(int a, int) {//占位参数
cout << "xxx" << endl;
}
int main() {
fun(10, 10);
system("pause");
return 0;
//占位参数还可以有默认参数
void fun(int a, int = 10) {
cout << "xxx" << endl;
}
int main() {
fun(10);
system("pause");
return 0;
}