方法重载C ++ - >只有一种方法叫做

时间:2017-04-10 23:53:13

标签: c++ methods overloading

我有这个代码,唯一被调用的方法是'double',为什么?

  #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)
  }

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

这有帮助吗?