子程式過載

2021-06-18 07:05:02 字數 854 閱讀 8778

子程式過載是指有一系列具有相同的子程式名稱,但有不同的型別和數目的引數的子程式,它們用於完成不同但相關的操作。在程式中呼叫某個過載的子程式時,編譯器將根據呼叫的子程式及其所使用的引數序列和數目來確定那個子程式將被執行。

1. 在編寫過載子程式時應注意各子程式的引數個數和引數型別的差異,否則編譯器將不能正確判斷應該呼叫那個子程式而產生編譯錯誤。    

2. 在過載中,子程式的返回型別並不能作為差異的條件,即不能僅因為子程式返回型別不同而使用過載技術。例如,下面的子程式過載將產生編譯錯誤:

void fun(int, float);

int fun(int, float);

原因是雖然這兩個子程式的返回型別不同(乙個是void, 另乙個是int),但由於編譯器在編譯時將自動忽略返回型別,所以這兩個子程式將被認為不存在差異而產生編譯錯誤。

3. 過載中的浮點型引數和字元型引數不能算作差異條件,例如

void fun(float f);

void fun(char ch);

因為它們的不同僅在於乙個是浮點型,另乙個是字元型,而編譯器並不認為這是差異,所以會產生編譯錯誤。但如果使用指標型或引用型變數,則可以避免這種錯誤。例如,下面的子程式過載都是正確的:

void fun(float* f);

void fun(char* ch);

或者void fun(float &f);

void fun(char &ch);

編譯器在對帶有過載子程式的程式進行編譯時,會首先忽略子程式的返回型別,然後檢查每個子程式在引數個數以及型別上的差異,最後對每個子程式都產生相應的機器碼。當在程式中呼叫這些子程式時,系統將根據引數的個數和型別的對應性,來呼叫對應的子程式。

摘自《全c程式設計》

wordcount例子程式

hadoop 0.20.1裡的wordcount源 與0.19.2已經有較大的區別了。在新版本的hadoop中,org.apache.hadoop.mapred包被org.apache.hadoop.mapreduce所取代。不過為了保持相容性,org.apache.hadoop.mapred還是存...

COBOL子程式呼叫

內部子程式 identification division.program id.proc a.environment division.data division.procedure division.identification division.program id.proc b.enviro...

COBOL子程式呼叫

內部子程式 identification division.program id.proc a.environment division.data division.procedure division.identification division.program id.proc b.enviro...