原文: https://www.programiz.com/cpp-programming/function

在本教程中,我们将借助示例学习 C++ 函数和函数表达式。

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

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

  • 画圆的函数
  • 给圆上色的函数

将复杂的问题分成较小的块可以使我们的程序易于理解和重用。

有两种函数:

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

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


C++ 用户定义函数

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

用户定义的函数将执行特定任务的代码分组,并为该组代码指定名称(标识符)。

从程序的任何部分调用该函数时,它们都将执行该函数主体中定义的代码。


C++ 函数声明

声明函数的语法为:

  1. returnType functionName (parameter1, parameter2,...) {
  2. // function body
  3. }

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

  1. // function declaration
  2. void greet() {
  3. cout << "Hello World";
  4. }

这里,

  • 该函数的名称为greet()
  • 该函数的返回类型为void
  • 空括号表示没有任何参数
  • 函数体写在{}内部

注意:我们将在本教程的后面部分学习returnTypeparameters


调用函数

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

这就是我们可以调用上面的greet()函数的方法。

  1. int main() {
  2. // calling a function
  3. greet();
  4. }

C   函数 - 图1

函数如何在 C++ 中工作


示例 1:显示文本

  1. #include <iostream>
  2. using namespace std;
  3. // declaring a function
  4. void greet() {
  5. cout << "Hello there!";
  6. }
  7. int main() {
  8. // calling the function
  9. greet();
  10. return 0;
  11. }

输出

  1. Hello there!

函数参数

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

例如,让我们考虑以下函数:

  1. void printNum(int num) {
  2. cout << num;
  3. }

在此,int变量num是函数参数。

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

  1. int main() {
  2. int n = 7;
  3. // calling the function
  4. // n is passed to the function as argument
  5. printNum(n);
  6. return 0;
  7. }

示例 2:带参数的函数

  1. // program to print a text
  2. #include <iostream>
  3. using namespace std;
  4. // display a number
  5. void displayNum(int n1, float n2) {
  6. cout << "The int number is " << n1;
  7. cout << "The double number is " << n2;
  8. }
  9. int main() {
  10. int num1 = 5;
  11. double num2 = 5.5;
  12. // calling the function
  13. displayNum(num1, num2);
  14. return 0;
  15. }

输出

  1. The int number is 5
  2. The double number is 5.5

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

然后,我们将num1num2作为参数传递。 这些值分别通过函数参数n1n2存储。

C   函数 - 图2

带参数的 C++ 函数

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


return语句

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

  1. void displayNumber() {
  2. // code
  3. }

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

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

然后,return语句可用于从函数返回值。

例如,

  1. int add (int a, int b) {
  2. return (a + b);
  3. }

在这里,我们具有数据类型int而不是void。 这意味着该函数返回int值。

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

return语句表示函数已结束。 函数内return之后的任何代码均不执行。


示例 3:加两个数字

  1. // program to add two numbers using a function
  2. #include <iostream>
  3. using namespace std;
  4. // declaring a function
  5. int add(int a, int b) {
  6. return (a + b);
  7. }
  8. int main() {
  9. int sum;
  10. // calling the function and storing
  11. // the returned value in sum
  12. sum = add(100, 78);
  13. cout << "100 + 78 = " << sum << endl;
  14. return 0;
  15. }

输出

  1. 100 + 78 = 178

在上述程序中,add()函数用于查找两个数字的和。

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

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

C   函数 - 图3

C++ 函数与return语句的配合使用

注意,sumint类型的变量。 这是因为add()的返回值是int类型的。


函数原型

在 C++ 中,函数声明的代码应在函数调用之前。 但是,如果要在函数调用之后定义函数,则需要使用函数原型。 例如,

  1. // function prototype
  2. void add(int, int);
  3. int main() {
  4. // calling the function before declaration.
  5. add(5, 3);
  6. return 0;
  7. }
  8. // function definition
  9. add(int a, int b) {
  10. cout < (a + n);
  11. }

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

  1. void add(int, int);

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

函数原型的语法为:

  1. returnType functionName(dataType1, dataType2, ...);

示例 4:C++ 函数原型

  1. // using function definition after main() function
  2. // function prototype is declared before main()
  3. #include <iostream>
  4. using namespace std;
  5. // function prototype
  6. int add(int, int);
  7. int main() {
  8. int sum;
  9. // calling the function and storing
  10. // the returned value in sum
  11. sum = add(100, 78);
  12. cout << "100 + 78 = " << sum << endl;
  13. return 0;
  14. }
  15. // function definition
  16. int add(int a, int b) {
  17. return (a + b);
  18. }

输出

  1. 100 + 78 = 178

上面的程序与示例 3 几乎相同。 唯一的区别是,此处在函数调用之后定义了函数

这就是我们在此示例中使用函数原型的原因。


使用用户定义函数的好处

  • 函数使代码可重用。 我们可以声明一次并多次使用它们。
  • 通过将每个小任务划分为一个函数,函数使程序更容易。
  • 函数增加了可读性。

C++ 库函数

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

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

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

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

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


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

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main() {
  5. double number, squareRoot;
  6. number = 25.0;
  7. // sqrt() is a library function to calculate the square root
  8. squareRoot = sqrt(number);
  9. cout << "Square root of " << number << " = " << squareRoot;
  10. return 0;
  11. }

输出

Square root of 25 = 5

在此程序中,sqrt()库函数用于计算数字的平方根。

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

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