C++函數分兩種:有返回值的和沒返回值的
1.有返回值的函數
調用函數流程
如圖,sqrt(6.25)為函數調用,被調用的函數叫做被調用函數,包含函數調用的函數叫做調用函數。
參數是發送給函數的信息,返回值是從函數中發送回去的值。
在使用函數之前,C++編譯器必須知道函數的參數類型和返回值類型。如果缺少,編譯器將不知道如何解釋返回值。
C++程序應為程序中使用的每個函數提供原型
sqrt()的函數原型:
double sqrt(double);
如果省略分號,那么這行代碼將被解釋為一個函數頭,並要求接着提供定義該函數的函數體。
提供函數原型有兩種方法:
1.在源代碼文件中輸入函數原型
2.包含文件cmath,其中定義了原型(更好)
不要混淆函數原型和函數定義。原型只描述函數接口(描述發送給函數的信息和返回的信息)。頭文件中包含了原型,庫文件中包含了函數的編譯代碼。
程序清單2.4 sqrt.cpp
//sqrt.cpp - - using the sqrt() function #include<iostream> #include<cmath> int main() { using namespace std; double area; cout << "Enter the floor area,in square feet,of your home:"; cin >> area; cin.get(); double side; side = sqrt(area); cout << "That's the equivalent of a square " << side << " feet to the side." << endl; cout << "How fascinating!" << endl; cin.get(); return 0; }
C++庫函數存儲在庫文件中,如果運行程序時,得到消息指出_sqrt是一個沒有定義的外部函數,很有可能是編譯器不能自動搜索數學庫(編譯器傾向於給函數名添加下划線前綴——提示它們對程序具有最后的發言權)。
C++允許在程序的任何地方聲明新變量,也可以在創建變量時對它賦值
double side=sqrt(area) 叫做初始化
cin知道如何將輸入流中的信息轉化為double型,cout知道如何將double類型插入到輸出流中,這些對象都很智能化。
2.函數變體
有些函數需要多項信息
如:pow()
double pow(double,double);第一個參數為底,第二個參數為指數的冪
answer=pow(5.0,8.0)
另外一些函數不接受任何參數
int rand(void);該函數不接受任何參數,並返回一個隨機整數
省略void,括號為空,則是一個不接受任何參數的隱式聲明
如:myGuess=rand();
C++中,函數調用中必須包括括號,即使沒有參數
還有些函數不需要返回值,如顯示一個時刻表,在屏幕中顯示就好
void bucks(double);
由於不返回值,不能放在賦值語句或其他表達式中,而是一條純粹的函數調用語句
bucks(1234.56);
在有些語言中,有返回值的叫函數,沒有的叫過程
標准C庫提供了140多個預定義的函數,如果其中的函數滿足要求則調用它們。
不滿足,就自己寫。
對於庫函數,通常把原型放在main()定義之前,並提供新函數的源代碼,放在main()后面。