C++中函数可以将一段代码逻辑封装复用,减少重复代码,提升代码可读性。这篇笔记我们介绍C++中函数的使用。
一个函数定义包括函数名,参数列表,返回值类型以及函数体。下面例子定义了一个将两个整型参数相加的函数,它的返回值也是一个整型。
int add(const int a, const int b) {
return a + b;
}
前面我们介绍过const
关键字,对于函数参数我们应尽可能的将不可变参数声明为const
,以避免对其做出误修改。
调用函数非常简单,我们使用函数名并传入参数即可,下面是一个例子。
#include <iostream>
int add(const int a, const int b) {
return a + b;
}
int main() {
int a = add(1, 2);
std::cout << a << std::endl;
return 0;
}
C++中通常我们需要先声明函数再使用,但有时我们的C++代码中函数定义可能写在调用的后面,此时我们可以将声明和定义拆开编写,下面是一个例子。
#include <iostream>
int add(int a, int b);
int main() {
int a = add(1, 2);
std::cout << a << std::endl;
return 0;
}
int add(const int a, const int b) {
return a + b;
}
实际开发中,我们的函数声明通常写在头文件中而定义写在源文件中,它们通常都是像上面这样拆开编写的。
C++中,函数默认是值传递的,只有当我们将参数声明为引用类型时才是引用传递。下面例子我们使用引用参数实现了两个数字的交换。
#include <iostream>
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 1;
int b = 2;
swap(a, b);
std::cout << a << std::endl;
std::cout << b << std::endl;
return 0;
}
有关引用我们将在后续章节详细介绍。
函数重载是指在同一个作用域中,可以定义多个函数名称相同但参数列表不同的函数。编译器会根据调用时提供的参数类型和个数来决定实际调用哪个函数。下面是一个函数重载的例子,我们在整型版本的add()
基础上添加了一个浮点型的重载函数。
#include <iostream>
int add(const int a, const int b) {
return a + b;
}
double add(const double a, const double b) {
return a + b;
}
int main() {
double a = add(1.2, 2.0);
std::cout << a << std::endl;
return 0;
}
调用函数时,编译器会根据传入的参数列表自动选择合适的函数实现。
C++中函数参数可以包含默认值,下面是一个例子。
#include <iostream>
int add(const int a, const int b = 0) { return a + b; }
int main() {
double a = add(2);
std::cout << a << std::endl;
return 0;
}