2011-03-16 8 views
4

이 함수는 오버랩 된 함수입니까?C++에서 오버로드 된 함수

void f(int a, int b) {} 
void f(int& a, int& b) {} 
void f(int* a, int* b) {} 
void f(const int a, const int b) {} 

또는 오버로드 함수는 인수의 개수 나 유형이 다른 경우에만 발생합니까?

답변

7

숫자 1, 2, 3이 있습니다. 숫자 4가 1을 다시 선언했습니다.

최상위 const 한정자는 함수 선언에 영향을주지 않습니다. 그들은 당신이 함수 정의 내에서이를 사용하는 방식을 변경,하지만 여전히 같은 기능

void f(int); 
void f(const int); //redeclares 
void f(const int x) //same as above 
{ 
    x = 4; //error, x is const 
} 

이있어, 다른 한편으로는 잘

void f(const int); 
void f(int x) //same as above 
{ 
    x = 4; //OK Now 
} 

주 즉 비 최상위 consts 과부하 해결에 참여하십시오. 예 :

void f(int & x) 
void f(const int & x) //another function, overloading the previous one 

그리고 마지막으로, 당신은

요청 또는 인수의 수 또는 유형이 다른 경우에만 발생 기능을 오버로딩?

예, 그렇습니다 만, int, int*int& 다른 유형입니다. 물론 1 또는 3의 경우 대부분 모호한 호출이되지만 컴파일러가 어떤 것을 의미하는지 알 수있는 경우도 있습니다. 예를 들어,

void f(int); 
void f(int&); 
f(3)//calls f(int) 
int x = 3; 
f(x); //ambiguous call; 
+0

1, 2가 모호성을 야기 : 그리고 4 일 1의 재정의입니다! – Nawaz

+1

@Nawaz : 꼭 필요하지는 않음 –

+1

최고 수준의 const에 주목하기 위해 +1. –

3

1 및 2는 lvalues와 모호성을 갖지만 그럼에도 불구하고 과부하입니다.

http://ideone.com/lRFQi

+0

왜 출력/코드를 stackoverflow에 포함시키지 않습니까? 필자는 ideone이 특별한 컴파일/디버깅 기능이있는 pastebin이지만이 대답이 사라지기 전에 링크가 무효가 될 것임을 알 수 있습니다. –

+0

1과 2는 r 값과 모호합니다 ... 아니면 l 값에도 적용됩니까? –

+0

에 대한 모든 대답에 대해 나는 혼란 스럽다. C++의 Thinkin은 함수와 함수의 차이가 인수에 의해 전달되고 다른 인수는 참조로 전달된다는 점을 강조한다. 포인터를 전달하는 것은 어떨까요? 필자의 결론은 아무 것도 오버로드 된 함수가 아니라는 것입니다. – Kobe