當前位置:首頁 » 編程軟體 » 編譯器為什麼越界函數越重載

編譯器為什麼越界函數越重載

發布時間: 2022-04-26 04:54:14

❶ 什麼函數不能重載,為什麼

函數重載要求編譯器能夠唯一地確定調用一個函數時應執行哪個函數代碼,即採用哪個函數實現。確定函數實現時,要求從函數參數的個數和類型上來區分。這就是說,進行函數重載時,要求同名函數在參數個數上不同,或者參數類型上不同。否則,將無法實現重載。例如,可以給函數名add()定義多個函數實現,該函數的功能是求和,即求兩個操作數的和。其中,一個函數實現是求兩個int型數之和,另一個實現是求兩個浮點型數之和,再一個實現是求兩個復數的和。

❷ C++如何實現函數重載的,即C++編譯系統如何區分不同的重載函數

編譯之後,同名的函數會根據其參數的不同等對名字做處理
比如說
int num() - > num@xxyy
int num(int n) - > num@aabbcc
我只是舉例子,實際上生成的符號可能有所區別,但是c++的編譯器就是這么處理重載的,你使用vc自帶的mpbin可以查看dll的導出符號,或者自己編寫一個dll導出重載的函數,然後命令行
mpbin -exports XX.dll > a.txt
可以查看你的同名的函數被編譯器分配了一個什麼樣的名稱~~@符號之後的字元串肯定不同的,@前面的函數名是一樣的~

不知道你清楚了沒,不然我明天給你發一下我的截圖,之前我做COM互操作研究了一下~~可以切磋下~~

❸ 函數重載是否可以理解為重新定義函數

在C/C++里函數的重新定義是指兩個函數原型完全相同,只是其具體實現不同,而函數的重載則是兩個函數具有相同的函數名,但其函數簽名不名.(函數簽名是由函數的參數列表來決定的,不同的參數類型,不同的參數數量及不同的參數順序都可以說兩個函數具有不同的簽名).函數重載設計的初衷是用同一個函數可以處理不同類型的數據.比如你有一個函數是int max(int a,int b);在你調用這個函數時,如果傳遞給這個函數兩個非int型的參數,編譯器就會報錯,因為你定義的該函數只接收兩個int型的參數,如果你想讓它處理double型的數據,你可以再寫一個函數double max(double a,double b);這樣這兩個函數就構成了重載.

❹ C++的函數重載有何意義!

在你這個簡單的程序里顯示的結果可能是一樣的
重載會在很多地方用到
而且在這個程序里兩者返回值一個是int型,一個是double型的,如果這個結果還涉及運算可能就會不同了。
比如用add結果來除以或乘以一個double型的數。

❺ 為什麼函數重載時僅僅返回值不同是不允許的

假設你有兩個返回值不同的函數,比如
int getvalue(viod) {return value1;}
float getvalue(viod) {return value;}
那麼當你去調用他們的時候,由於你調用的時候
寫的是
getvalue();
於是你的編譯器就無法知道 你調用的是上面哪個 函數(因為兩個函數都不用傳參數,編譯器無法區分它們), 所以就會報錯。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如果你寫成這樣 (函數重載)
int getvalue(int i, int j) {return value1;}..................1
float getvalue(viod) {return value;}......................2
那麼當你當你調用
getvalue()編譯器就會知道 你調用的是第2個函數
getvalue(2, 3) 編譯器就會知道 你調用的是第1個函數
就不會出錯了。

❻ 為什麼函數重載的目的是減少空間

函數重載是指在同一作用域內,可以有一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數。重載函數通常用來命名一組功能相似的函數,這樣做減少了函數名的數量,避免了名字空間的污染,對於程序的可讀性有很大的好處。
如果沒有函數重載機制,如在C中,你必須要這樣去做:為這個print函數取不同的名字,如print_int、print_string。這里還只是兩個的情況,如果是很多個的話,就需要為實現同一個功能的函數取很多個名字,如加入列印long型、char*、各種類型的數組等等。、
類的構造函數跟類名相同,也就是說:構造函數都同名。如果沒有函數重載機制,要想實例化不同的對象,那是相當的麻煩!不用為了對不同的參數類型或參數個數,而寫多個函數。多個函數用同一個名字,但參數表,即參數的個數或(和)數據類型可以不同,調用的時候,雖然方法名字相同,但根據參數表可以自動調用對應的函數。如果我們使用reflector去查看微軟寫的.net的基類庫的話,我們可以發現他使用很多的方法重載,這樣我們在調用的時候,就不需要記那麼多的方法名稱,而是知道了方法的功能就可以直接的給他傳遞不同的參數,編譯器會明確的知道我們調用了哪一個方法。操作符重載,本質上就是函數重載,它大大豐富了已有操作符的含義,方便使用,如+可用於連接字元串等。

❼ 如下程序 編譯器沒報錯,越界了,為什麼 就是一個函數的重載啊 難道同名的函數重載不起,求解釋。

LZ犯了一個低級錯誤。
還記得C++如果設計一個函數實現兩個數的交換要怎樣做么?
像swap(int a, int b )是不會成功的,要傳入指針或引用!
inline void space(int *&a);做了這個工作
但是void space(int **a)沒有,改為
void space(int **&a)可行了

給我分吧。。。。。我看了很久才看出來啊!!!!

❽ 函數重載是什麼意思

所謂重載,是同一函數名,但是參數類型或參數個數不同的函數。比方說,你可以定義add函數為兩個實數的相加;然後定義重載函數,實現兩個復數的相加。
在主函數或其他函數中調用add函數,你的參數類型不同,編譯器也會自動識別匹配,不會出現調用error。
更詳細可以看網路,或者課本:
http://ke..com/link?url=_Xw7Dz8-P6EWj5_CGVhcmAcaM9CZ-ghk-eXjt0NI08JRMErjRzjsSkX64wQhiS--

❾ C++中參數為引用和參數為形參的兩個函數為什麼可以形成重載

這個問題我本來也不太清楚,請教了別人才知道
首先,這不是重載
你傳進去的參數a,b是 int 類型的,如果你傳進去的是double類型的,編譯器是會出錯的
比如:
double d = 3;
cube(d);
編譯器根本不知道你想調用的是哪個函數,因為兩個函數都符合,因此編譯不通過
而如果傳遞的是 int 類型或者其他類型,int 類型就能轉換成 double 類型了
而對於cube(double&)這個函數,由於有個&,其實是要找到double類型的內存才能匹配上,傳int進去是不行的,因此你的代碼能編譯通過

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:624
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:353
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:68
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:293
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:786
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:336
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:201
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:795
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:353
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:581