반응형
CPP 초급 강좌 12. C++ 함수 오버로딩 function overloading 사용법, 주의사항
함수 오버로딩(function overloading)
동일한 이름을 함수를 여러개 만들 수 있는 기능
단, 인자의 개수, 인자의 타입이 달라야 한다.
사용자 입장에서는 동일 함수처럼 사용할수 있어 좋다.
이게 당연한 거지라고 생각하실지도 모르겠지만, C언어는 안 되는 기능이다.
예제 코드
void f1(int p1) {};
void f1(int p1, int p2) {};
void f1(int p1, int p2, int p3) {};
void f1(float p1) {};
int main()
{
f1(0);
f1(0,0);
f1(0,0,0);
f1(0.0f);
}
주의사항
디폴트 파라미터와 같이 사용할 수 없는 경우가 있다.
void f1(int p1) {};
void f1(int p1, int p2 = 0) {};
int main()
{
f1(0);
}
반환 타입만 다르다.
void f1(int p1) {};
int f1(int p1) {};
int main()
{
f1(0);
}
반환타입만 달라서는 함수 호출 입장에서 구분할 수 없다. 안된다.
반환타입이 달라고 인자수의 차이로 구분이 가능하면 문제없다. 아래 코드 보세요.
void f1(int p1) {};
int f1(int p1, int p2) {};
int main()
{
f1(0);
}
위 코드는 잘 된다. 반환 타입이 다르지만, 인자 수가 차이가 있어 구별이 가능하다.
정수 타입, 포인터 타입 인자의 함수 오버로딩?
#include <iostream>
using namespace std;
void f1(int p1) { cout << "int" << endl; };
void f1(char* s) { cout << "char*" << endl; };
int main()
{
f1(0);
f1(NULL);
f1(nullptr);
}
정수타입과 포인터 타입의 인자로 사용하는 함수 오버로딩은 모호하다. char* 부르기 위해서는 이전에는 char* 로 명시적인 형 변환이 필요했다. c++11 부터 nullptr이란게 생겨서 구지 부르면 부를수 있다.
하지만 이런 오버로딩은 쓰기가 어렵다. 추천하지 못하겠다.
봐주셔서 감사합니다.
반응형
'IT > C++(CPP)' 카테고리의 다른 글
CPP 초급 강좌 14. C++ 함수삭제, delete function 사용이유? (4) | 2020.10.24 |
---|---|
CPP 초급 강좌 13. C++ 템플릿 기초, template (12) | 2020.10.23 |
CPP 초급 강좌 11. C++ default parameter 사용과 주의사항 (8) | 2020.10.21 |
CPP 초급 강좌 10. C++ string (1) | 2020.10.15 |
CPP 초급 강좌 9. C++ constexpr, const (4) | 2020.10.14 |
댓글