2017-04-10 69 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

谢谢你的帮助。但不是真的。 –