现代 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
- 返回类型,表示不返回任何内容。
- 参数
- 函数中的一个变量,它由对该函数的每次调用赋值。
- 参数
- 对函数进行特定调用时参数的值。