2012-09-20 5 views
4
int add(int a,int b) 
{ 
    cout<<"1"<<endl; 
    return a+b; 
} 
int add(int a,char c) 
{ 
     cout<<"2"<<endl; 
     return a+c; 
} 
int main() 
{ 
      cout<<add(10,20)<<endl; //1 
      cout<<add(10,'a')<<endl; //2 
      cout<<add('a','b')<<endl; //3 
} 

위의 코드에서 첫 번째 함수는 function add (int, int)를 호출하고 두 번째 함수는 function add (int, char)를 호출합니다. 세 번째 함수 호출은 오류가 발생하지만 add (int, char) 함수를 호출합니다. 이유를 설명 할 수 있습니다.함수 오버로드가 작동하는 방식

+0

C++은 약하게 입력됩니다. 컴파일러는 오류없이 코드가 작동하도록 최선을 다할 것이므로이 경우 char 입력을 int로 자동 캐스팅합니다. – Kapura

+0

@ 카푸라 약자가 의미하는 것이 아닙니다. – asawyer

답변

0

가장 가까운 일치 INT와 문자와 하나입니다. char은 암시 적으로 int로 변환 될 수 있기 때문에 여전히 작동합니다. 모두 하나의 기능 변환의 파라미터를 적어도뿐만 아니라 매개 변수의 또 다른 기능들과 일부 같은 더 나은 변환하면

int a = 'a'; // Returns the ascii value for 'a'. 
+0

ASCII는 주어진 것이 아니기 때문에 나는 그것을 "숫자 값"이라고 더빙했다. – Xeo

1

는 그 기능을 수행한다.

모든 매개 변수가 적어도 다른 함수의 매개 변수로 변환되는 것은 아니며 후자 함수의 모든 매개 변수가 적어도 이전 함수의 매개 변수와 마찬가지로 변환되지는 않는 경우 일반적인 경우에 모호한 점이 있습니다. 일반 기능.

관련 문제