跳到主要内容

C++ 函数

提示
  1. 函数定义:C++中的函数是执行特定任务的代码块。分为标准库函数(预定义)和用户定义函数。
  2. 用户定义函数:程序员可以定义自己的函数,这些函数可以将代码分组来执行特定任务,并为这组代码赋予一个名字(标识符)。
  3. 函数声明和调用:函数通过声明指定其返回类型、名称和参数,调用函数时执行其函数体中定义的代码。函数声明可以使用函数原型在函数调用之前或之后定义。

函数是执行特定任务的代码块。

假设我们需要创建一个程序来绘制并着色一个圆。我们可以创建两个函数来解决这个问题:

  • 一个用于绘制圆的函数
  • 一个用于给圆着色的函数

将复杂问题分解为更小的部分,可以使我们的程序易于理解并且可重用。

函数有两种类型:

  1. 标准库函数: C++中预定义的
  2. 用户定义的函数: 由用户创建

在本教程中,我们主要关注用户定义的函数。

C++ 用户定义的函数

C++允许程序员定义自己的函数。

用户定义的函数将代码分组以执行特定任务,并且这组代码被赋予一个名称(标识符)。

当函数从程序的任何部分被调用时,它将执行函数体中定义的所有代码。

C++ 函数声明

声明函数的语法是:

返回类型 函数名称 (参数1, 参数2,...) {
// 函数体
}

这是一个函数声明的例子。

// 函数声明
void greet() {
cout << "Hello World";
}

其中,

  • 函数的名称是 greet()
  • 函数的返回类型是 void
  • 空括号意味着它没有任何参数
  • 函数体写在 {} 里面

注: 我们稍后在本教程中将学习 返回类型参数

调用函数

在上面的程序中,我们声明了一个名为 greet() 的函数。要使用 greet() 函数,我们需要调用它。

以下是如何调用上面的 greet() 函数。

int main() {

// 调用函数
greet();

}

C++ 函数的工作原理

示例 1:显示文本

#include <iostream>
using namespace std;

// 声明一个函数
void greet() {
cout << "Hello there!";
}

int main() {

// 调用函数
greet();

return 0;
}

输出

Hello there!

函数参数

如上所述,函数可以带参数(参数)声明。参数是在声明函数时传递的值。

例如,考虑下面的函数:

void printNum(int num) {
cout << num;
}

这里,int 变量 num 是函数参数。

调用函数时,我们将值传递给函数参数。

int main() {
int n = 7;

// 调用函数
// n 作为参数传递给函数
printNum(n);

return 0;
}

示例 2:带参数的函数

// 程序打印文本

#include <iostream>
using namespace std;

// 显示一个数字
void displayNum(int n1, float n2) {
cout << "整数是 " << n1;
cout << "双精度浮点数是 " << n2;
}

int main() {

int num1 = 5;
double num2 = 5.5;

// 调用函数
displayNum(num1, num2);

return 0;
}

输出

整数是 5
双精度浮点数是 5.5

在上面的程序中,我们使用了一个具有一个 int 参数和一个 double 参数的函数。

然后我们将 num1 和 num2 作为参数传递。这些值分别由函数参数 n1 和 n2 存储。

C++ 带参数的函数

注: 调用函数时传递的参数类型必须与函数声明中定义的相应参数类型匹配。

返回语句

在上面的程序中,我们在函数声明中使用了 void。例如,

void displayNumber() {
// 代码
}

这意味着函数不返回任何值。

也可以从函数返回一个值。为此,我们需要在函数声明期间指定函数的 返回类型

然后,return 语句可以用来从函数返回一个值。

例如,

int add (int a, int b) {
return (a + b);
}

这里,我们使用了数据类型 int 而不是 void。这意味着该函数返回一个 int 值。

代码 return (a + b); 返回两个参数的总和作为函数值。

return 语句表示函数已经结束。在函数中 return 之后的任何代码都不会被执行。

示例 3:加两个数字

// 使用函数加两个数字的程序

#include <iostream>

using namespace std;

// 声明一个函数
int add(int a, int b) {
return (a + b);
}

int main() {

int sum;

// 调用函数并存储
// 返回值在 sum 中
sum = add(100, 78);

cout << "100 + 78 = " << sum << endl;

return 0;
}

输出

100 + 78 = 178

在上面的程序中,add() 函数用于计算两个数字的和。

我们在调用函数时传递了两个 int 字面量 10078

我们将函数的返回值存储在变量 sum 中,然后打印它。

C++ 带返回语句的函数工作原理

注意 sum 是一个 int 类型的变量。这是因为 add() 的返回值是 int 类型的。

函数原型

在 C++ 中,函数声明的代码应该在函数调用之前。然而,如果我们想在函数调用后定义一个函数,我们需要使用函数原型。例如,

// 函数原型
void add(int, int);

int main() {
// 在声明之前调用函数。
add(5, 3);
return 0;
}

// 函数定义
void add(int a, int b) {
cout << (a + b);
}

在上面的代码中,函数原型是:

void add(int, int);

这为编译器提供了关于函数名称和参数的信息。这就是为什么我们可以在函数定义之前使用代码来调用函数。

函数原型的语法是:

返回类型 函数名称(数据类型1, 数据类型2, ...);

示例 4:C++ 函数原型

// 在 main() 函数之后使用函数定义
// 函数原型在 main() 之前声明

#include <iostream>

using namespace std;

// 函数原型
int add(int, int);

int main() {
int sum;

// 调用函数并存储
// 返回值在 sum 中
sum = add(100, 78);

cout << "100 + 78 = " << sum << endl;

return 0;
}

// 函数定义
int add(int a, int b) {
return (a + b);
}

输出

100 + 78 = 178

上述程序与示例 3几乎相同。唯一的区别在于,这里的函数是在函数调用之后定义的。

这就是为什么我们在这个示例中使用了函数原型。

使用用户定义函数的好处

  • 函数使代码可重用。我们可以声明一次并多次使用它们。
  • 函数使程序更简单,因为每个小任务都被分解成一个函数。
  • 函数提高了可读性。

C++库函数

库函数是C++编程中的内置函数。

程序员可以通过直接调用函数来使用库函数;他们不需要自己编写这些函数。

C++中的一些常见库函数有sqrt()abs()isdigit()等。

为了使用库函数,我们通常需要包含定义这些库函数的头文件。

例如,为了使用诸如sqrt()abs()的数学函数,我们需要包含头文件cmath

示例 5:C++程序查找一个数字的平方根

#include <iostream>
#include <cmath>
using namespace std;

int main() {
double number, squareRoot;

number = 25.0;

// sqrt()是一个库函数,用于计算平方根
squareRoot = sqrt(number);

cout << "25的平方根 = " << squareRoot;

return 0;
}

输出

25的平方根 = 5

在这个程序中,使用了sqrt()库函数来计算一个数字的平方根。

sqrt()函数的声明定义在cmath头文件中。这就是为什么我们需要使用代码#include <cmath>来使用sqrt()函数。

要了解更多,请访问C++标准库函数