2017-04-10 1 views
-1

私はこのコードを持っていますが、呼び出される唯一のメソッドは 'double'です。なぜですか?メソッドオーバーロードC++ - >呼び出されるメソッドは1つだけ

#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、inbuilt関数と衝突しています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

コードを少し編集するだけで、この問題のトラブルシューティングに役立ちます。 intとして、私はこれを行うと

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

は、私は別のバージョンが実際に呼び出されていることがわかり、そして数1000000000longとして格納されていないこと、しかし。 (私のマシン上では少なくとも私のところで)私はlongとしてストレージを強制するための4番目の呼び出しを追加しました。これは私が出力のために得るものです:

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

これは役に立ちますか?

+0

ありがとうございました。しかし、実際にはありません。 –

関連する問題