함수 오버로딩 예제

Posted on

경우에 따라 컴파일러는 매개 변수의 형식과 호출된 함수에 전달되는 순서에 따라 매개 변수를 비교하여 모호성을 해결합니다. 아래 예제를 살펴보십시오: 멤버 함수와 비멤버 함수 를 모두 오버로드할 수 있습니다. 다음 표에서는 C++가 동일한 범위에서 이름이 같은 함수 그룹을 구별하는 데 사용하는 함수 선언의 일부를 보여 주십니다. 이 가이드의 시작 부분에서 언급했듯이 다른 반환 유형과 동일한 매개 변수 목록을 갖는 함수는 오버로드 할 수 없습니다. 그러나 함수에 다른 매개 변수 목록이 있는 경우 오버로드할 수 있는 동일하거나 다른 반환 형식을 가질 수 있습니다. 한마디로 함수의 반환 형식은 함수 오버로드에서 아무 역할도 하지 않습니다. 중요한 것은 함수의 매개 변수 목록입니다. 컴파일러는 각 인수에 대한 후보 함수 집합을 만듭니다. 후보 함수는 해당 위치의 실제 인수를 형식 인수의 유형으로 변환할 수 있는 함수입니다. 이러한 비정적 멤버 함수는 암시된 이 포인터가 함수가 호출되는 개체 형식과 일치하도록 요구하거나 오버로드된 연산자의 경우 첫 번째 인수가 연산자가 적용되는 개체와 일치하도록 요구합니다. 오버로드된 연산자에 대한 자세한 내용은 오버로드된 연산자 참조)를 참조하십시오. 두 가지 문제가 상호 작용하고 함수 오버로드를 복잡하게 만듭니다: 이름 마스킹(범위로 인한) 및 암시적 형식 변환.

기본 매개 변수가 있는 함수는 오버로드된 함수일 수도 있습니다. 그러나 모호한 오류에 대한 게이트를 열 수 있습니다. 아래 예제 를 살펴보십시오: 오버로드된 함수는 전송된 데이터의 종류에 따라 다른 작업을 수행하는 것으로 나타납니다. 반환 형식만 을 기반으로 동일한 형식의 인수 목록이 있는 함수를 오버로드하는 것은 오류입니다. 아니요. 두 함수 모두 두 매개 변수를 사용합니다. 즉, 숫자 매개 변수는 두 함수모두에 대해 동일합니다. 인수와 일치하도록 사용자 정의 전환이 필요한 경우 가장 일치하는 일치를 평가할 때 표준 변환이 사용되지 않습니다. 둘 이상의 후보 함수에 사용자 정의 변환이 필요한 경우에도 함수는 동일한 것으로 간주됩니다. 예: 형식 기반 오버로드는 코드 업데이트가 실수로 컴파일러에서 선택한 메서드 오버로드를 변경할 수 있는 코드 유지 관리를 방해할 수도 있습니다. [2] 함수 호출이 실제 매개 변수 형식과 형식 매개 변수 형식의 가장 일치하는 일치를 찾아 호출할 특정 함수가 해결되는 일부 “최상일치” 알고리즘을 사용하여 함수 호출이 해결되는 정적 다형성의 분류입니다.

이 알고리즘의 세부 정보는 언어마다 다릅니다.