C ++ 세 번째 글 머리 기호 : 함수 오버로딩

개념

함수 오버로딩은 함수의 특별한 경우입니다. C ++에서는 동일한 범위에서 유사한 함수를 가진 동일한 이름의 여러 함수를 동일한 범위에서 선언 할 수 있습니다. 이러한 함수의 형식 매개 변수 목록 (매개 변수의 수 또는 유형 또는 순서)은 동일한 이름이 달라야합니다. 함수 오버로딩은 비슷한 함수를 가진 서로 다른 데이터 유형의 문제를 처리하는 데 자주 사용됩니다. 예를 들어, 수학에서 두 숫자를 더하는 문제에서 두 개의 정수를 더하거나 두 배를 더할 수 있습니다.
예:

#include <iostream>
using namespace std;

int Add(int left, int right)
{
    
    
	return left + right;
}
double Add(double left, double right)
{
    
    
	return left + right;
}
long Add(long left, long right)
{
    
    
	return left + right;
}
int main()
{
    
    
	Add(10, 20);
	Add(12.12, 12.13);
	Add(12L, 30L);
	return 0;
}

참고 : C ++에서 반환 값 유형 만 다른 경우 다음 예제와 같이 오버로드를 구성 할 수 없습니다.

short Add(short left, short right)
{
    
    
	return left + right;
}
int Add(short left, short right)
{
    
    
	return left + right;
}
//不构成重载

이 두 함수가 오버로드 된 함수를 구성 할 수없는 이유는 무엇입니까? 이는 C ++에서 함수를 호출 할 때 반환 값을 무시할 수 있기 때문입니다.이 두 함수를 사용하면 컴파일러는 우리가 호출하는 함수를 알지 못합니다.
이것으로부터 우리는 C ++ 함수 오버로딩의 규칙을 요약 할 수 있습니다.

1.函数名称必须相同。
2.参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
3.函数的返回类型可以相同也可以不相同。
4.仅仅返回类型不同不足以成为函数的重载

C ++는 함수 오버로딩을 지원하지만 C 언어는이를 지원하지 않는 이유

여기에 사진 설명 삽입
여기에 사진 설명 삽입
이 두 그림을 보면 컴파일러가 .c와 .cpp를 컴파일 할 때 함수의 이름이 바뀌는 것을 알 수 있습니다. .c 파일을 컴파일 할 때 함수 이름 앞에 "_"만 추가합니다. 즉, 두 함수의 이름이 Add () 인 경우 내부 매개 변수는 같지 않지만 컴파일러가 컴파일 할 때 "_Add"로 이름이 변경됩니다. 하지만 C ++에서는 함수 이름이 C ++에서 "? Add @@ YANNN @ Z"형식으로 "? Add @@ YANNN @ Z"로 바뀝니다. where '? '이름의 시작을 나타냅니다.'? '다음은 매개 변수 목록의 시작을 나타내는 함수 이름 "@@ YA"이며, 다음 3 개 문자는 각각 반환 값 유형과 두 매개 변수 유형을 나타냅니다. "@Z"는 이름의 끝을 의미하므로 두 함수에 의해 생성 된 기호 테이블의 이름이 다르고 컴파일 중에 오류가 발생하지 않으므로 C ++는 함수 오버로딩을 지원합니다.

추천

출처blog.csdn.net/qq_43825377/article/details/109234523