2013-06-01 64 views
-3

讓說我有三個.cpp文件和2個文件。C++。我們可以有相同的命名功能,但在不同的文件?

1號文件:

它main.cpp中,它調用的所有功能和東西。包含2個頭文件。


第二個文件:

包含兩個功能:

int print(int num2, int num1) 

int update(int num1) 

第三檔:

包含三大功能:

int calculate(int num2, int num3, int num4) 

int update(int num2, char random) 

int divied(int all) 

+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++

正如你可以告訴第二和第三個文件有一個同名函數「INT更新」 但在一個有1個參數和其他它有兩個。

請問我能打電話給一個我想要的嗎?我會得到編譯錯誤嗎? 我現在無法測試它,因爲我正在使用庫計算機。

+3

那麼爲什麼不等到你回家,而不是發佈一個問題? –

+1

搜索[internal linkage and external linkage](http://stackoverflow.com/questions/1358400/what-is-external-linkage-and-internal-linkage-in-c) – dyp

+3

有一堆在線編譯器,例如http://gcc.godbolt.org/或http://coliru.stacked-crooked.com/ – dyp

回答

5

技術上,是的,你會的。具有不同簽名的函數形成一個重載集合,並且通過匹配傳遞的實際參數的數量和類型來選擇適當的函數。

OTOH在全局命名空間中放置這樣的名字是一種可怕的做法。這只是意外等待發生 - 有人會通過打字錯誤打電話給意想不到的功能。

真正的重載集不是隨機形成的,而是通過設計:這是一個具有相同語義的函數,只是使用不同類型的彈藥。他們是意味着聯合工作,而回答「哪一個被稱爲」是「我不在乎」時最好的工作。無論編譯器選擇哪個都會做適當的工作。

0

名稱港島線在C++進行錯位,並因此可以具有不同參數的那些功能。 TGhe編譯器爲它們創建一個名稱,它基於參數。

這就是爲什麼你可以在同一類的東西,如:

foo(int a); 
foo(int a, int b); 
foo(std:string s), 
etc. ... 

,這也適用於正常功能。

+2

國際海事組織這與名稱變形無關,而是與聯動(和/或超載)無關。 – dyp

0

這是在C++允許並且被稱爲函數重載。從所述的C++語言標準

C13 P1當在相同範圍單個名稱指定了兩個或更多個不同的聲明重載

,該名稱被說成是重載。通過擴展,聲明相同名稱但具有不同類型的同一範圍內的兩個聲明稱爲重載聲明。只有函數函數模板聲明可以被重載;變量和類型聲明不能被重載。

只要您使用正確的參數調用函數,編譯器就會使用正確的函數。

0

是的,這就是所謂的函數重載。事實上,它可以在同一個文件中工作。只要確保函數不採用相同的參數,或者編譯器將無法區分它們。

相關問題