【问题标题】:Method Overloading C++ -> Only one method called方法重载 C++ -> 只调用一个方法
【发布时间】:2017-04-10 23:53:12
【问题描述】:

我有这段代码,唯一调用的方法是'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)
  }

【问题讨论】:

  • 重命名方法 abs,它与内置函数 abs() 冲突
  • 成功了,谢谢。
  • 不客气

标签: c++ methods overloading


【解决方案1】:

我无法在 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

【讨论】:

    【解决方案2】:

    对您的代码稍作修改将有助于解决此问题。

    #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
    

    这有帮助吗?

    【讨论】:

    • 感谢您的帮助。但不是真的。
    猜你喜欢
    • 2010-09-30
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多