함수 오버로딩 고급

보물창고·2023년 1월 19일
0

c++ basic 코드누리

목록 보기
48/50
post-custom-banner

함수 오버로딩과 함수 주소

  • 함수의 주소를 출력하기 위해서
    : 함수의 시그니처를 맞춰야 함.

  • 동일한 이름의 함수가 2개 있을 때
    -> "함수 포인터 타입으로 캐스팅" 을 하자!

  • 예시 코드 1번.

double square(double a) {}
int square(int a) {}


int main()
{
	cout << static_cast<double(*)(double)> (&square);
}

  • 예시 코드 2번
    : template 함수가 있을 경우. 비록 호출하는 곳이 없더라도,
    컴파일 시에 "템플릿 파라미터로 전달"을 통해 주소를 구할 수 있음.
template <typename T>
void foo(T a) {} 

int main()
{
	cout << &foo<int> << endl;

}

함수 찾는 순서

알쓸잡 : 동일한 이름의 함수가 여러개 있을 때 함수 찾는 순서??

  • 주석 처리하면 서 확인하자.
  1. 타입과 동일한 타입의 함수를 먼저 호출함.
  2. template 타입이 먼저 호출됨.
  3. 데이터 손실 없는 타입이 호출 : double은 데이터의 손실이 없음..
  4. 데이터 손실이 있지만, 암시적 형변환에 의해
    : char, int 호출인데, 모호성발생함.
  5. 유저 정의 타입이 호출.
  6. 마지막이 가변인자임.

// 변환 생성자 구조체 
struct FLOAT
{
	FLOAT(float f) {}
}

void foo(int) { cout << "int";}
void foo(float) { cout << "float";}
void foo(char) { cout << "char";}
void foo(double) { cout << "double";}
void foo(...) { cout << "...";}
void foo(FLOAT){ cout << "FLOAT"; }

template <typename T>
void foo(T) { cout << "T";}


int main()
{
	foo(3.5f); //?????
}
profile
🔥🔥🔥
post-custom-banner

0개의 댓글