25. 함수 다중정의 (OverLoading)

Yongs12 ㅣ 2023. 6. 16. 16:41

함수 다중 정의는 동일한 이름의 함수 하나로 매개 변수만 다르게 해서 함수를 정의하는 방법이다.


함수 다중 정의 사용 예시

#include <iostream>

int Add(int x, int y)
{
    return x + y;
}

double Add(double x, double y)
{
    return x + y;
}

int main()
{
    // 매개변수로 들어가는 자료형에 따라 호출되는 함수가 달라진다.
    std::cout << Add(5, 6) << std::endl;      
    std::cout << Add(3.14, 2.71) << std::endl; 
    return 0;
}



단점
동일한 이름으로 여러가지 매개변수를 받기 때문에 코드가 더 복잡해지고 이해하기 어려워질 수 있다.




참고사항

C언어로 바꾸면 동일한 이름의 함수를 만들 수 없다.
C형식으로 바꿔버리면 동일한 이름의 함수를 쓸 수 없기 때문에 컴파일 에러가 뜬다.




C는 안되지만 C++에서 오버로딩이 가능한 이유

함수를 선언만하고 정의를 하지 않았을 경우 링크 에러가 발생한다.




링크 에러 내용



이때 위와 같이 똑같은 Add함수 이름을 쓰지만 링크에러에서 나오는 (?Add@@YAHHH@Z)와 같이 실제로는
컴파일러 내부에서 Name Mangling이 진행된다.
Name Mangling은 링커가 고유하게 식별할 수 있도록 컴파일된 코드에서 함수 또는 변수 이름을 수정하는 프로세스이다.
이를 통해 함수의 이름이 같더라도 C++에서 함수 오버로딩이 가능하게 만든다.

 

같은 이름의 함수지만 실제로는 고유한 이름을 가지게 된다.

 

'C, C++' 카테고리의 다른 글

27. 클래스 생성자와 소멸자  (0) 2023.06.18
26. 클래스  (0) 2023.06.17
24. 범위기반 for문  (0) 2023.06.15
23. 참조자  (0) 2023.06.14
22. c++ 메모리 동적할당  (0) 2023.06.13