跳转到内容

现代 C++:精华部分/终于,函数

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

函数在编程中非常重要,以至于在没有函数的情况下,教控制结构相当繁琐,所以让我们欣慰地看看如何创建自己的函数。

#include <iostream>
#include <string>

// Calls to this function evaluate to float.
float readFloat()
{
	std::string temp;
	std::cin >> temp;
	return std::stof(temp);
}

// This one returns char.
char readChar()
{
	std::string temp;
	std::cin >> temp;
	return temp[0];
}

// Another function returning float.
float evaluate(float a, char oper, float b)
{
	switch (oper)
	{
	case '+':
		return a + b;
	case '-':
		return a - b;
	case '*':
		return a * b;
	case '/':
		return a / b;
	}
}

int main()
{
	float a, b;
	char oper;

	// The ultimate truism, this never stops being true.
	while(true)
	{
		std::cout << "Enter two numbers and an operator (+ - * /).\nOr press Ctrl+C to exit.\n";

		// Parse two floats from standard input.
		a = readFloat();
		b = readFloat();
		// And a character.
		oper = readChar();

		std::cout << a << " " << oper << " " << b << " = " << evaluate(a, oper, b) << "\n";
	}
}

哇哦,一旦理解了函数,代码就变得容易阅读多了。

正如注释所解释的那样,每个函数在其名称之前都有一个 **返回类型**。函数的返回类型将是该函数的任何调用类型。**函数调用** 是一个导致函数运行的表达式,例如 std::stof(temp)。当控制流经过 return 语句时,包含的函数退出。函数的 **调用者** 然后接收 **返回值** 作为函数调用的值,并从该点继续执行。

return 可以替代 switch 中的 break。关键是控制不会从一个 case “贯穿”到另一个 case。C++ 允许这种情况发生,但这可能非常令人困惑,而且很少有用。

到目前为止,您可能已经注意到 main 的返回类型是 int。它是您不需要从中 return 的唯一非 void 函数;默认情况下,当控制流到达底部时,它返回 0。0 表示程序成功运行,或运行没有问题;任何其他值告诉运行程序的人发生了错误。这些值称为“退出代码”,但您不会很快需要指定它们。

函数还有 **参数**,即它们括号之间声明的变量。任何函数调用都必须为函数的每个参数提供一个值;这些值称为 **参数**。

最后,函数必须出现在任何对它的调用之前的源代码中。但是,C++ 为此提供了一个重要的漏洞,我们将在后面讨论。

正在建设中

返回类型
任何对特定函数的调用将被解析为的值的类型。
函数调用
导致函数运行的表达式。
调用者
包含特定函数调用的函数。
返回值
特定函数调用将被解析为的值。
void
返回类型,表示不返回任何内容。
参数
函数中的一个变量,它由对该函数的每次调用赋值。
参数
对函数进行特定调用时参数的值。
现代 C++:精华部分
 ← 循环 终于,函数
华夏公益教科书