- 后臺開發:核心技術與應用實踐
- 徐曉鑫
- 663字
- 2019-01-03 20:55:31
1.2 函數
1.函數的定義
一個C程序是由若干個函數組成的,C語言被認為是面向函數的語言,而C++面向過程的程序設計也沿用了C語言使用函數的方法。在C++面向對象的程序設計中,主函數以外的函數大多是被封裝在類中的。主函數或其他函數可以通過類對象調用類中的函數。無論是C還是C++,程序中的各項操作基本上都是由函數來實現的,程序編寫者要根據需要編寫一個個函數,每個函數用來實現某一功能。因此,讀者必須掌握函數的概念以及學會使用和設計函數。
定義函數的一般格式是:
返回值類型 函數名([形參]) { 函數體 }
在定義函數時函數名后面括號中的變量名稱是形參。在主調中調用一個函數時,函數名后面括號中的參數是實參。
【例1.2】 函數、形參、實參的使用舉例。
#include<iostream> using namespace std; int min(int a,int b){ // 這里的min就是函數名,a、b是形參, // 返回值是一個int整型 if(a<b)return a; else return b; } int main(){ int a=10,b=1; cout<<min(a,b)<<endl; // 這里的a、b是實參 return 0; }
函數的執行結果是:
1
例1.2中定義了一個函數,有2個整型的參數,且返回值是整型的,在main函數中調用min函數時,傳入的是實參。
形參與實參的區別是:形參只有被調用時才分配內存單元,在調用結束時,立即釋放所分配的內存單元。實參與形參的類型應相同或賦值兼容。
2.函數重載
C++允許用同一函數名定義多個函數,但這些函數必須參數個數不同或類型不同,這就是函數重載。例1.3說明了函數重載的使用方法。
【例1.3】 求不同類型的數中的最小者。
#include<iostream> using namespace std; int min(int a, int b, int c){ if(a>b)a=b; if(a>c)a=c; return a; } long long min(long long a,long long b, long long c){ // 與上面那個函數的差別是參數的類型不同 if(a>b)a=b; if(a>c)a=c; return a; } double min(double a, double b){ // 這個函數與以上的差別是只有2個參數 if(a-b>(1e-5))a=b; return a; } int main(){ int a=1,b=2,c=3; cout<<min(a,b,c)<<endl; long long a1=100,b1=200,c1=300; cout<<min(a1,b1,c1)<<endl; double a2=1.1,b2=2.2; cout<<min(a2,b2)<<endl; return 0; }
程序的執行結果是:
1 100 1.1
這里分別需要比較3個整數、3個長整數和2個浮點數,并獲得各組中的最小值。例1.3中分別定義了3個函數,而且函數名都是一樣的,不過參數個數不一樣或者參數類型不一樣,這就是使用了函數重載來實現功能。
在使用函數重載時,同名函數的功能應當相同或相近,不要用同一函數名去實現幾個完全不相干的功能,這樣雖然程序能運行,但是可讀性不好,會讓人覺得莫名其妙。
3.函數模板
函數模板,實際上是建立一個通用函數,其函數類型和形參不具體指定,而用一個虛擬的類型來代表,這個通用函數就是函數模板。凡是函數體相同的函數都可以用這個模板來代替,而不用定義多個函數,實際使用時只需在模板中定義一次就可以了。在調用函數時,系統會根據實參的類型來取代模板中的虛擬類型,從而實現不同函數的功能。
定義函數模板的一般格式是:
template<typename T>
下面的程序說明了函數模板的使用方法。
【例1.4】 函數模板使用舉例。
#include<iostream> using namespace std; template<typename T> T min(T a,T b,T c){ if(a>b)a=b; if(a>c)a=c; return a; } int main(){ int a=1,b=2,c=3; cout<<min(a,b,c)<<endl; long long a1=1000000000,b1=2000000000,c1=3000000000; cout<<min(a1,b1,c1)<<endl; return 0; }
程序輸出結果:
1 1000000000
例1.4中定義了一個函數模板,用來獲得3個數中的最小者。若傳入3個整型的,函數就將虛擬類型T轉成int去執行;若傳入3個長整型的,函數就將T轉化成long long去執行。這樣就可以不用定義類型不同的函數了,只需一個函數模板即可搞定。
在編寫函數模板時,可以先寫一個函數,然后把其中的變量類型都替換成虛擬類型即可。可以看到,用函數模板比函數重載更方便,但是它只適用于函數個數相同而類型不同的情況。
- C# Programming Cookbook
- Access 數據庫應用教程
- Learning ArcGIS Pro 2
- Mastering Spring MVC 4
- 跟小海龜學Python
- Python Deep Learning
- Learning Apache Mahout Classification
- Ext JS 4 Web Application Development Cookbook
- HTML5與CSS3基礎教程(第8版)
- Programming with CodeIgniterMVC
- .NET Standard 2.0 Cookbook
- Learning Ionic
- 網絡綜合布線與組網實戰指南
- 一步一步學Spring Boot:微服務項目實戰(第2版)
- 歐姆龍PLC編程指令與梯形圖快速入門