2017-04-10 55 views
-1

我有這個代碼,唯一調用的方法是'double'one,爲什麼?方法重載C++ - >只有一種方法叫做

#include<iostream> 
    using namespace std; 

    int abs(int i){ cout << i << endl; return 0; }; 
    long abs(long l){ cout << l << endl; return 0; }; 
    double abs(double d){ cout << d << endl; return 0; }; 

    int main(){ 
    abs(-13.63); 
    abs(1); 
    abs(1000000000); //chama long abs(long l) 
    } 
+0

重命名方法abs,它與內置函數衝突abs() – HaroldSer

+0

這樣做的竅門,謝謝。 –

+0

不用客氣 – HaroldSer

回答

0

我不能讓你的代碼在編譯codepad,我覺得你的方法是用核心abs功能發生衝突,但這種調整 版本的工作:

#include<iostream> 
using namespace std; 

int xabs(int i){ cout << "i:" << i << endl; return 0; } 
long xabs(long l){ cout << "l:" << l << endl; return 0; } 
double xabs(double d){ cout << "d:" << d << endl; return 0; } 

int main(){ 
xabs(-13.63); 
xabs(1); 
xabs(1000000000); //chama long abs(long l) 

return 0; 
} 

輸出:

d:-13.63 
i:1 
i:1000000000 
0

對您的代碼進行一些小修改將有助於解決此問題。

#include<iostream> 
using namespace std; 

int abs(int i) { cout << "*1* " << i << endl; return 0; }; 
long abs(long l) { cout << "*2* " << l << endl; return 0; }; 
double abs(double d){ cout << "*3* " << d << endl; return 0; }; 

int main(){ 
    abs(-13.63); 
    abs(1); 
    abs(1000000000); //chama long abs(long l) 
    abs(1000000000L); 
} 

當我這樣做,我看到不同的版本確實被調用,而且這個數字1000000000沒有存儲爲long,但作爲一個int。 (至少在我的機器上。)我添加了第四個電話來強制存儲爲long,它似乎已經工作。這是我得到的輸出:

*3* -13.63 
*1* 1 
*1* 1000000000 
*2* 1000000000 

這有幫助嗎?

+0

謝謝你的幫助。但不是真的。 –