프로그래밍/C++

함수의 오버로딩 (Overloading)

cyanhe_wh 2020. 12. 21. 17:17
반응형

컴파일에서 함수를 오버로딩하는 과정
함수의 이름은 같은데 매개변수, 리턴타입 등의 특징은 다른 여러개의 함수를 만들 수 있는 기능

  1. 자신과 타입이 정확히 일치하는 함수를 찾는다.

  2. 정확히 일치하는 타입이 없을 경우, 형변환을 통해서 일치하는 함수를 찾는다.

    • char, unsigned char, short는 int로 변환
    • unsigned short는 int의 크기에 따라 int 혹은 unsigned int 로 변환된다.
    • float은 double로 변환된다.
    • enum은 int로 변환된다.
  3. 2단계까지도 일치하는 것이 없다면

    • 임의의 숫자(numeric) 타입은 다른 숫자 타입으로 변환 (ex float -> int)
    • enum도 임의의 숫자 타입으로 변환된다. (ex enum -> double)
    • 0은 포인터 타입이나 숫자 타입으로 변환된 0 은 포인터 타입이나 숫자 타입으로 변환된다.
    • 포인터는 void 포인터로 변환된다.
  4. 유저 정의된 타입 변환으로 일치하는 것을 찾는다.
    만약에 컴파일러가 위 과정을 통하더라도 일치하는 함수를 찾을 수 없거나 같은 단계에서 두 개 이상 일치하는
    경우에 모호하다(ambiguous)라고 판단해서 오류를 발생하게 된다.

반응형