"C ++"함수 오버로딩

  • 기능 과부하 개념

함수 오버로딩은 함수의 특별한 경우입니다. C ++에서는 동일한 범위에서 유사한 함수를 가진 동일한 이름의 여러 함수를 동일한 범위에서 선언 할 수 있습니다. 동일한 이름의 이러한 함수의 매개 변수 목록 (번호, 유형, 순서)은 달라야하며 그들은 종종 구현을 처리하는 데 사용됩니다. 유사한 기능이지만 다른 데이터 유형

자연어 단어가 여러 의미를 가지고있는 것처럼 문맥에 따라 단어의 진정한 의미를 판단해야합니다. 단어가 오버로드 되더라도 C ++ 컴파일러는 상황에 따라 같은 이름의 함수를 호출합니다. . 다음 인스턴스를 볼 수 있습니다.

int Add(int a,int b)
{
    
    
return a+b;
}

double Add(double a,double b)
{
    
    
return a+b;
}

int main()
{
    
    
Add(1,2);
Add(1.0,2.0);//编译器根据情况自己决定调用哪个函数
}
  • 이름 수정
    C /
    C ++에서 프로그램은 전처리, 컴파일, 어셈블리를 실행하기 위해 다음 단계를 거쳐야합니다
    . Ca 언어와 C ++의 이름 수정 규칙이 다릅니다. C 언어에서 이름 수정 규칙이 특히 간단합니다. 밑줄 함수 이름 앞에 추가되고 C ++는 함수 오버로딩, 네임 스페이스 등을 지원해야하므로 C ++ 이름 수정 규칙이 더 복잡해집니다. C ++에서는 Name Mangling이라는 메커니즘을 사용합니다. Name Mangling은 컴파일 과정에서 함수와 변수의 이름을 재구성하는 메커니즘입니다. 간단히 말해서 컴파일러는 함수를 구별하기 위해 특정 알고리즘을 통해 함수를 전달합니다., Re -전 세계적으로 고유 한 이름으로 장식되었습니다.

  • extern "C"

extern "C"의 주요 기능은 다른 C 언어 코드를 호출하는 C ++ 코드를 올바르게 구현하는 것입니다. extern "C"를 추가 한 후 컴파일러는 코드의이 부분을 C ++ 대신 C 언어로 컴파일하도록 지시합니다. C ++는 함수 오버로딩을 지원하므로 컴파일러는 함수 이름뿐만 아니라 함수를 컴파일 할 때 컴파일 된 코드에 함수의 매개 변수 유형을 추가하고 C 언어는 함수 오버로딩을 지원하지 않으므로 C 컴파일 언어 코드의 함수 함수의 매개 변수 유형을 포함하지 않으며 일반적으로 함수 이름을 포함합니다.
이 함수는 C ++의 출현 이전에 많은 코드가 C 언어로 작성되었고 매우 낮은 수준의 라이브러리도 C 언어로 작성 되었기 때문에 매우 유용합니다. 원본 C 코드와 이미 작성된 코드를 더 잘 지원하기 위해 C 언어 라이브러리, C ++에서 가능한 한 C를 지원할 필요가 있으며 extern "C"가 전략 중 하나입니다.

이 기능은 주로 다음 상황에서 사용됩니다.

1. C ++ 코드는 C 언어 코드를 호출합니다.

2. C ++ 헤더 파일에서 사용

3. 여러 사람이 공동으로 개발할 때 어떤 사람은 C 언어를 잘하고 어떤 사람은 C ++를 잘할 수 있습니다.이 경우에도 유용 할 것입니다.

일반적으로이 섹션의 지식은 다음 질문으로 요약됩니다.
1. 다음 두 함수가 오버로드를 형성 할 수 있습니까?

void fun(int a=10)
{
    
    
cout<<"void fun(int)"<<endl;
}

void fun(int a)
{
    
    
cout<<"void fun(int)"<<endl;
}

오버로딩을 형성하지 않고 함수 오버로딩은 기본값과 관련이 없으며 유형과 관련이 있습니다.

2. C 언어가 함수 오버로딩을 지원하지 않는 이유는 무엇입니까?
C 언어의 이름 수정 규칙은 매우 간단하기 때문에 함수 이름으로 인해 컴파일러가 구별 할 수 없게됩니다.

3. C ++에서 함수 오버로딩의 맨 아래 계층은 어떻게 처리됩니까?
C ++는 이름 변경 (기울기) 기술을 사용하여 함수 이름을 변경하고 매개 변수가 다른 동일한 이름의 함수를 구별합니다.

4. 함수를 C ++에서 C 스타일로 컴파일 할 수 있습니까?
예, 함수 앞에 extern "C"를 추가하여 컴파일러에게 C 언어 규칙에 따라 함수를 컴파일하도록 지시합니다.

추천

출처blog.csdn.net/NanlinW/article/details/103033661