2017-04-10 3 views
-1

이 코드가 있는데 유일한 메서드는 'double'입니다. 이유는 무엇입니까?메서드 오버로드 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, 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으로 추가했는데 효과가있는 것 같습니다. 이것은 출력을 위해 얻은 것입니다 :

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

그게 도움이됩니까?

+0

도와 줘서 고맙습니다. 그러나 정말로. –