C++ 函数与程序示例

⚡ 智能摘要

函数在 C++ 将相关语句分组到可重用的命名代码块中,这些代码块接收输入、处理输入并返回输出。程序结合了内置库函数和用户自定义函数,每个函数都经过声明、定义和调用,以避免代码重复。

  • 🧩 它是什么: 函数将接受参数、处理参数并返回值的语句组合在一起,在一个代码块中运行一个共同的任务。
  • 📚 内置功能: 此 C++ 标准库提供了诸如 sqrt() 之类的现成函数,可以直接调用而无需编写它们。
  • 🛠️ 用户自定义函数: 程序员创建自己的函数,给它们取一个唯一的名字,然后从程序中的任何位置调用该代码。
  • 📝 声明和定义: 原型声明返回类型、名称和参数类型;定义提供函数体。
  • 📞 调用方式和参数: 调用函数会运行其函数体;参数的数量和类型必须与函数体参数匹配,并且允许使用默认值。
  • 🤖 人工智能辅助: GitHub Copilot 和类似的助手搭建脚手架 C++ 函数签名、函数体和函数调用(通过简短注释)。

C++ 功能

什么是函数 C++?

函数 C++ 指的是一组接受输入、处理输入并返回输出的语句。函数背后的想法是将重复执行的常见任务组合在一起。如果您有不同的输入,则不会再次编写相同的代码。您只需使用一组称为参数的不同数据来调用该函数即可。

每 C++ 程序至少有一个函数,即 main() 函数。您可以将代码划分为不同的函数。这种划分应该使得每个函数都执行特定的任务。

有许多内置函数 C++ 标准库。您可以在程序中调用这些函数。

为什么要使用函数?

使用函数有很多好处。其中包括:

  • 每个函数将相关代码放在一起。这使程序员更容易理解代码。
  • 通过消除代码重复,函数使编程变得更容易。
  • 函数有助于代码重用。您可以在程序的不同部分甚至程序外部调用同一个函数来执行任务。

内置函数

In C++库函数是内置的 C++ 函数。要使用这些函数,您只需直接调用它们即可。您不必自己编写函数。

例如1:

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	double num, squareRoot;
	cout << "Enter number: ";
	cin >> num;
	squareRoot = sqrt(num);
	cout << "The square root of " << num << " is: " << squareRoot;
	return 0;
}

输出:

的输出 C++ 内置 sqrt() 函数示例

以下是代码截图:

C++ 代码调用了 cmath 库中内置的 sqrt() 函数。

Code 说明:

  1. 在我们的程序中包含iostream头文件以使用其功能。
  2. 包含 cmath 库以使用其函数。我们想使用其中定义的函数 sqrt()。
  3. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  4. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  5. 声明两个双精度变量,num 和 squareRoot。
  6. 在控制台上打印一些文本。文本要求用户输入一个数字。
  7. 从键盘读取用户输入。输入将成为变量num的值。
  8. 调用库函数 sqrt(),该函数计算数字的平方根。我们将参数 num 传递给该函数,这意味着它将计算 num 的平方根。此函数在 cmath 库中定义。
  9. 在控制台上打印用户输入的数字、其平方根和一些其他文本。
  10. 程序成功完成后必须返回值。
  11. main() 函数体结束。

用户定义函数

C++ 允许程序员定义自己的函数。函数的目的是将相关代码分组。然后为代码赋予一个唯一的标识符,即函数名。

可以从程序的任何其他部分调用/调用该函数。然后它将执行其主体内定义的代码。

例如2:

#include <iostream>
using namespace std;

void sayHello() {
	cout << "Hello!";
}

int main() {

	sayHello();

	return 0;
}

输出:

的输出 C++ 用户自定义的 sayHello() 函数

以下是代码截图:

C++ 定义和调用用户自定义函数的代码

Code 说明:

  1. 在我们的程序中包含iostream头文件以使用其功能。
  2. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  3. 创建一个名为 sayHello() 的用户定义函数。
  4. 当调用 sayHello() 函数时在控制台上打印一些文本。
  5. sayHello() 函数体结束。
  6. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  7. 调用/调用名为 sayHello() 的函数。
  8. 程序成功完成后必须返回值。
  9. main() 函数体结束。

编译器必须在使用函数之前就知道该函数。

函数声明/原型

如果在 main() 函数之后定义用户定义函数,则 C++ 编译 将返回错误。原因是编译器不知道用户定义函数的详细信息。这些详细信息包括其名称、参数类型及其返回类型。

In C++,函数声明/原型声明了一个没有函数体的函数。这为编译器提供了用户定义函数的详细信息。

在声明/原型中,我们包含了返回类型、函数名称和参数类型。参数名称未添加。但是,添加参数名称不会产生错误。

C++ 函数声明/原型语法图

功能定义

函数声明的目的是告诉 C++ 编译器会知道函数名称、返回类型和参数。函数定义会告诉 C++ 编译器关于函数体的信息。

C++ 功能定义结构图

句法

return_datatype function_name( parameters) {
   function body 
}

从上面可以看出,一个函数定义有函数头和函数体,下面是参数的解释:

  • return_datatype - 某些函数会返回值。此参数表示返回值的数据类型。有些函数不返回值。在这种情况下,此参数的值为 void。
  • function_name- 这是函数的名称。函数名称和参数构成函数签名。
  • 参数——这指的是函数参数的类型、顺序和数量。有些函数没有参数。
  • 函数体-这些是定义函数将执行的操作的语句。

函数调用

要使函数执行指定任务并返回输出,必须调用该函数。调用函数时,它会执行函数主体中添加的语句。

函数通过其名称调用。如果函数接受参数,则在调用时应传递参数值。如果函数不接受参数,则在调用时无需传递任何值。

C++ 函数调用语法图

传递参数

In C++,参数是函数调用过程中传递给函数的数据。这些值必须初始化为各自的变量。

调用函数时,参数的数量必须与函数参数的数量一致。这意味着传递的值必须等于函数参数的数量。此外,参数的类型也必须与函数参数的类型一致。如果第一个参数是整数,则传递给它的值也必须是整数。

可以为函数参数设置默认值。如果在函数调用期间没有为参数传递值,则将使用默认值。

示例 3:如何编写和调用函数

#include <iostream>
using namespace std;
int addFunc(int, int);
int main() {
	int x, y, sum;
	cout << "Enter two numbers: ";
	cin >> x >> y;
	sum = addFunc(x, y);
	cout <<"The sum of "<<x<< " and " <<y<<" is: "<<sum;
	return 0;
}
int addFunc(int num1, int num2) {
	int addFunc;
	addFunc = num1 + num2;
	return addFunc;
}

输出:

的输出 C++ addFunc() 函数返回一个总和

以下是代码截图:

C++ 向 addFunc() 函数传递参数的代码

Code 说明:

  1. 在我们的程序中包含iostream头文件以使用其功能。
  2. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  3. 声明一个名为 addFunc() 的函数,该函数接受两个整数参数。这将创建函数原型。
  4. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  5. 声明三个整数变量,x、y 和 sum。
  6. 在控制台上打印一些文本。文本要求用户输入两个数字。
  7. 从键盘读取用户输入。用户应为变量 x 和 y 输入两个数字,并用空格分隔。
  8. 调用函数 addFunc() 并将参数 x 和 y 传递给它。该函数将对这些参数进行操作并将输出分配给变量 sum。
  9. 将变量 x、y 和 sum 的值与其他文本一起打印在控制台上。
  10. 该函数成功完成后必须返回值。
  11. main() 函数体结束。
  12. 函数定义。我们正在定义函数 addFunc()。我们将在函数主体 { } 中说明该函数将执行的操作。
  13. 声明一个名为 addFunc 的整型变量。
  14. 将参数 num1 和 num2 的值相加,并将结果赋给变量 addFunc。
  15. addFunc() 函数应该返回 addFunc 变量的值。
  16. 函数体结束,即函数定义结束。

常见问题

按值调用会复制参数,因此函数内部的更改不会影响原始值。按引用调用会传递带有 & 符号的变量,使函数可以直接修改调用者的值。 C++ 默认按值调用。

函数重载允许多个函数共享同一个名称,但它们的参数数量或类型不同。编译器会根据你传递的参数选择正确的版本,从而提高相关操作的可读性。

内联函数会要求编译器在每个调用点插入函数体,而不是进行普通的函数调用。这可以降低小型函数的开销,但编译器也可能忽略此提示。

递归函数会调用自身,将一个问题分解成更小的子问题。它需要一个终止递归的基本情况;否则,调用会无限重复,最终导致堆栈溢出。阶乘就是一个经典的例子。

您可以将参数作为指针或指定大小的数组传递,通常需要单独发送数组的长度,因为数组会退化为指针。参见传递参数。 数组 C++ 功能 完整的示例请参见此处。

函数直接返回一个值,但您可以使用输出引用参数、结构体、std::pair、std::tuple 或 std::vector 返回多个值。结构化绑定会在调用点解包返回的元组。

是的。人工智能编码助手可以将纯文本注释转换成完整的代码。 C++ 函数会给出签名、函数体和返回类型建议。它们还会重构过长的函数,但您应该检查生成的逻辑。

GitHub 副驾驶 自动补全 C++ 它会根据你的注释或名称提供函数定义、原型和调用方式,提出重载建议,并起草单元测试。它会引用头文件以提供上下文,但每条建议仍需审核。

总结一下这篇文章: