跳轉到內容

現代 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++:精華部分
 ← 迴圈 終於,函式
華夏公益教科書