函数
前言
函数时程序的基本组成单元,用于执行特定的任务或计算。函数的声明和定义时两个不同的概念,通常遵循特定的语法。在接下来将会对函数进行一个系统的讲解。
函数声明和定义
语法格式:
返回类型 函数名称(参数列表);
这个是函数声明,仅仅告诉我们函数的返回类型、名称、参数列表等等。
函数声明告诉编译器函数的名称、返回类型和参数类型;定义包括函数体。声明通常在头文件中,定义通常在源文件中。
示例:
//函数声明,放在.h类型文件中
int add(int a, int b);
//函数定义,放在.cpp类型文件中
int add(int a, int b){
return a + b;
}
返回类型
函数的返回类型可以是任何的数据类型,包括基本类型、指针、引用、类类型或void(无返回值)类型。
//示例
int getValue(){
return 42;
}
void printMessage(){
std::cout << "Hello, World!" << std::endl;
}
参数传递
参数可以按照值、引用或指针进行传递。
//按照值进行传递
void display(int x) {
std::cout << x << std::endl;
}
//按照引用进行传递
void increment(int &x) {
x++;
}
//按照指针进行传递
void reset(int *x) {
*x = 0;
}
函数重载
允许定义多个同名函数,但是参数列表必须不同。
void print(int i) {
std::cout << "Integer: " << i << std::endl;
}
void print(double d) {
std::cout << "Double: " << d << std::endl;
}
这个在使用的时候,根据传入的值的类型不同进行函数的确定。
默认参数
为参数提供默认值,调用时可以省略这些参数。
void display(int a, int b = 10) {
std::cout << "a: " << a << ", b: " << b << std::endl;
}
注意事项:
- 赋值顺序
- 传入参数时顺序
内联函数
使用inline
关键字进行定义,提示编译器将函数代码嵌入到调用点。
inline int square(int x) {
return x * x;
}
递归
函数调用自身来解决问题。
int factorial(int n) {
if (n <= 1) return 1;
else return n * factorial(n - 1);
}
函数指针
函数指针保存函数的地址,可以用于回调函数或动态调用。
int (*funcPtr)(int, int) = add;
int result = funcPtr(3, 4);
Lambda表达式
C++11引入的匿名函数,用于简化代码。
auto add = [](int a, int b) { return a + b; };
std::cout << add(3, 4) << std::endl;
模板函数
允许函数接收任意类型的参数。
template<typename T>
T add(T a, T b) {
return a + b;
}
命名空间
用于避免命名冲突,将函数组织到命名空间中。
namespace Math {
int add(int a, int b) {
return a + b;
}
}
int main() {
int result = Math::add(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}