跳转到内容

C++ 简介/函数 已弃用

来自维基教科书,开放世界中的开放书籍

一旦你开始认真编程,你可能会发现自己一遍又一遍地写着相同(或非常相似)的代码行。例如,假设你一直需要从程序的用户那里收集 4 个数字,并显示这些数字的总和和乘积。(注意:这不是一个具有代表性的例子。它只是一个例子,旨在简单到足以让初学者理解)。这样做一两次很容易,用这样的代码

int a, b, c, d;
a = b = c = d = 0;
cin >> a >> b >> c >> d;
cout << "Sum: " << (a + b + c + d) << endl;
cout << "Product: " << (a * b * c * d) << endl;

然而,每次你想要这样做时都输入所有这些命令是一个糟糕的想法。对于这么小的命令序列,你可能认为唯一潜在的问题可能是你的手因为输入太多而疲惫。这确实是问题,但它可以通过将代码从一个文件复制粘贴到另一个文件来解决,而不是直接输入它。然而,对于更大的命令序列,尤其是复杂的命令序列,即使这种策略也会导致问题

  • 修改:如果程序的要求发生了变化,影响到命令序列使用的所有地方,你可能会忘记在一个或两个地方更新它。或者你可能记得在所有地方更新它,但当你这样做的时候,会给程序引入潜在的致命错误。
  • 膨胀:程序的源代码变得比你或任何其他阅读代码的人想要的要长得多。
  • 实现某些功能的困难:某些算法(执行任务的指令的有序列表)非常难以使用顺序代码行来实现,即使它们不一定是复杂的任务。

幸运的是,在 C++(以及几乎所有其他值得注意的编程语言)中有一种方法可以定义可以在程序的任何地方运行的命令序列。这被称为定义函数。

例如,我们可以定义一个函数,该函数将打印出上面显示的总和和乘积。

void sumAndProd(void)
{
    int a, b, c, d;
    a = b = c = d = 0;
    cin >> a >> b >> c >> d;
    cout << "Sum: " << (a + b + c + d) << endl;
    cout << "Product: " << (a * b * c * d) << endl;
}

一旦定义了这个函数,你就可以通过键入它的名称,然后是 "()" 来执行(或调用)它。

sumAndProd();

(终止语句的分号不是函数调用的部分。)

现在,你可以将上面的代码复制到任何可能需要其功能的文件中。然后,你可以使用上面的语法调用该函数,只要你想就可以。这是一个包含此函数的完整程序

#include <iostream>
using namespace std;

void sumAndProd(void)
{
    int a, b, c, d;
    a = b = c = d = 0;
    cin >> a >> b >> c >> d;
    cout << "Sum: " << (a + b + c + d) << endl;
    cout << "Product: " << (a * b * c * d) << endl;
}

请注意,你必须将 sumAndProd 的定义放在它首次使用的地方之前。否则,你的编译器可能会抱怨“对未声明标识符的引用”之类的问题。然而,有一种替代方法可以告诉你的程序一个函数存在,而无需立即定义它;这项技术将在下面更详细地解释。

华夏公益教科书