1.2 函式
1.?函式的定義
乙個c程式是由若干個函式組成的,c語言被認為是面向函式的語言,而c++面向過程的程式設計也沿用了c語言使用函式的方法。在c++物件導向的程式設計中,主函式以外的函式大多是被封裝在類中的。主函式或其他函式可以通過類物件呼叫類中的函式。無論是c還是c++,程式中的各項操作基本上都是由函式來實現的,程式編寫者要根據需要編寫乙個個函式,每個函式用來實現某一功能。因此,讀者必須掌握函式的概念以及學會使用和設計函式。
定義函式的一般格式是:
返回值型別 函式名([形參])
在定義函式時函式名後面括號中的變數名稱是形參。在主調中呼叫乙個函式時,函式名後面括號中的引數是實參。
【例1.2】 函式、形參、實參的使用舉例。
#include
using namespace std;
int min(int a,int b)
int main()
函式的執行結果是:
1例1.2中定義了乙個函式,有2個整型的引數,且返回值是整型的,在main函式中呼叫min函式時,傳入的是實參。
形參與實參的區別是:形參只有被呼叫時才分配記憶體單元,在呼叫結束時,立即釋放所分配的記憶體單元。實參與形參的型別應相同或賦值相容。
2.?函式過載
c++允許用同一函式名定義多個函式,但這些函式必須引數個數不同或型別不同,這就是函式過載。例1.3說明了函式過載的使用方法。
【例1.3】 求不同型別的數中的最小者。
#include
using namespace std;
int min(int a, int b, int c)
long long min(long long a,long long b, long long c)
double min(double a, double b)
int main()
程式的執行結果是:
1100
1.1這裡分別需要比較3個整數、3個長整數和2個浮點數,並獲得各組中的最小值。例1.3中分別定義了3個函式,而且函式名都是一樣的,不過引數個數不一樣或者引數型別不一樣,這就是使用了函式過載來實現功能。
在使用函式過載時,同名函式的功能應當相同或相近,不要用同一函式名去實現幾個完全不相干的功能,這樣雖然程式能執行,但是可讀性不好,會讓人覺得莫名其妙。
3.?函式模板
函式模板,實際上是建立乙個通用函式,其函式型別和形參不具體指定,而用乙個虛擬的型別來代表,這個通用函式就是函式模板。凡是函式體相同的函式都可以用這個模板來代替,而不用定義多個函式,實際使用時只需在模板中定義一次就可以了。在呼叫函式時,系統會根據實參的型別來取代模板中的虛擬型別,從而實現不同函式的功能。
定義函式模板的一般格式是:
template
下面的程式說明了函式模板的使用方法。
【例1.4】 函式模板使用舉例。
#include
using namespace std;
template
t min(t a,t b,t c)
int main()
程式輸出結果:
11000000000
例1.4中定義了乙個函式模板,用來獲得3個數中的最小者。若傳入3個整型的,函式就將虛擬型別t轉成int去執行;若傳入3個長整型的,函式就將t轉化成long long去執行。這樣就可以不用定義型別不同的函式了,只需乙個函式模板即可搞定。
在編寫函式模板時,可以先寫乙個函式,然後把其中的變數型別都替換成虛擬型別即可。可以看到,用函式模板比函式過載更方便,但是它只適用於函式個數相同而型別不同的情況。
後台開發 核心技術與應用實踐
常用類庫 在c 中,臨時物件都是const型別的。可以使用union 聯合 判斷系統是大端 big endian 還是little endian 小端 只能把列舉賦值列舉變數,不能把元素的數值直接賦值列舉變數。共用體以最長的位元組為準,考慮記憶體對齊。結構體以內建型別的最小公倍數對齊。編譯階段 g ...
《後台開發核心技術與應用實踐》(一)
物件導向的c 後台開發核心技術與應用實踐 徐曉鑫 的學習筆記。後台開發技術能力體系,自省!後者先搜尋當前目錄,再搜尋標準頭檔案目錄 1 strlen 是函式,在執行時才能計算。引數必須是字元型指標 char 且必須是以 0 結尾的。當陣列名作為引數傳入時,實際上陣列已經退化為指標了。它的功能是返回字...
後台開發 核心技術與應用實踐1 7 預處理
1.7 預處理 c 提供的預處理功能主要有以下4種 巨集定義 檔案包含 條件編譯和布局控制。檔案包含在前面已描述過,下面重點描述巨集定義 條件編譯和布局控制,其中又著重講述常用巨集定義命令 do while 0 的妙用 條件編譯及extern c 塊的應用知識。1.常用巨集定義命令 def?ine命...