함수 오버로딩

보물창고·2022년 8월 10일
0

c++ basic 코드누리

목록 보기
9/50

개념

: 동일한 이름의 함수를 여러개 만들 수 있음.

  • 특징
    1) 반환 타입의 다름으로는 함수 오버로딩이 될수 없음.
    -> 이유 : 생각해보면, 호출자에서는 반환이 있는 함수라도 반환받지 않고,
    그냥 호출만 할 수 있다. 컴파일러 입장에서는 이러한 경우를 생각했을 때, 반환 타입만으로 오버로딩을 판단하기에는 어렵지 않을까??
    2) 오로지 인자 타입, 인자 갯수의 다름에서 함수 오버로딩이 가능함.

왜 존재하는 것일까?

: 동일한 기능을 가지고 있지만, 인자가 늘어나는 것을 대비하기 위해 만듦.

예시

  • int 인자가 있는 함수에 float형이나 double형을 보낼 경우, 데이터 손실이 발생함.

    problem
    : void func(int a) 에다가 3.8 과 3.4f를 보내서 인자 값을 출력해보아라.
    :: 그리고 데이터 손실이 발생하지 않게 해결하라.

주의 사항

1) 정수형과 포인터 타입에 대한 오버로딩은 만들지 말자.
: 포인터의 경우, 0이 인자로 들어갈 수 있음.
-> 모호성 발생함.
2) 디폴트 파라미터가 있는 함수가 있을 경우
, 가시성이 떨어짐.

problem

가) 반환 타입만 다르게 하는 함수오버로딩을 만들어보자.
: int 반환으로 하는 func과 void 반환하는 func 을 만들어라.

나) 인자 타입, 갯수를 다르게 하는 함수 오버로딩을 만들어보자.
: void func (int) , double func(string), double func( void) 을 만들어라.

다) 정수형과 포인터 타입의 함수 오버로딩을 만들어보자.
-> 오류는 발생하지 않지만, 모호한 표현임.
--> char*를 호출한다고 한다면, func(nullptr) 로 호출하면 됨.

: void func(int ) , void func(char *) 함수를 만들어라.

라) 디폴트 파라미터가 있는 경우에 대한 함수 오버로딩을 만들어보자.
: void func(int a) , void func(int a , int b = 0) 함수를 만들어라.

profile
🔥🔥🔥

0개의 댓글