現代 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
- 返回型別,表示不返回任何內容。
- 引數
- 函式中的一個變數,它由對該函式的每次呼叫賦值。
- 引數
- 對函式進行特定呼叫時引數的值。