제가 대학교 1학년 때 [명품 C++ Programming] 교재로 진행되는 C++ 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다.
(2022.9 ~ 2022.12)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.
🍑함수 중복(function overloading)
- 동일한 이름의 함수를 만드는 것
- 다형성
- C언어에서는 불가능
- 함수 오버 ‘로딩’ 임을 주의하기
가능한 범위
- 보통 함수들(전역 함수들) 사이
- 클래스의 멤버 함수들 사이
- 상속 관계의 기본 클래스와 파생 클래스의 멤버 함수들 사이
성공 조건
- 중복된 함수들의 이름 동일
- 매개 변수 타입이나 매개 변수 개수가 달라야함
- 리턴 타입은 무관
장점
- 작성이 편리
- 함수 이름을 구분해서 기억할 필요가 없음
- 함수 호출 실수를 줄일수 있음
생성자 함수 중복
목적
다양한 형태로 초깃값을 전달하기 위해
소멸자 함수 중복
- 가능
→ 소멸자는 매개 변수를 가지지 않으므로 클래스내에 오직 하나만 존재
🍑함수 중복의 모호성
- 함수 중복의 조건을 갖추었다고 해도, 컴파일러가 어떤 함수를 호출할지 판단하기 어려운 경우 컴파일 오류가 발생
형 변환으로 인한 모호성
- 함수의 매개 변수 타입과 호출문의 실인자 타입이 일치하지 않는 경우 보이지 않게 형변환을 시도 한다
char → int → long → float → double
- 왼쪽측에 있는 타입이 오른쪽에 있는 어떠한 타입으로 던 자동형 변환이 가능하여 일어나는 일
참조 매개 변수로 인한 모호성
- 참조 매개 변수를 가진 함수와 보통 매개변수를 가진 함수가 중복 시
- 예를들어
(int a) (int &a)인 경우 매개변수의 타입은 동일하고 참조이냐 보통 매개 변수이냐만 다르므로 어느 함수를 호출해야할지 모호함
디폴트 매개 변수로 인한 모호성
- 디폴트 매개 변수를 가진 함수가 보통 매개 변수를 가진 함수와 중복 작성될 때
- 디폴트 매개 변수는 뒤에 몰려서 작성되므로 매개변수의 앞쪽이 동일하다면 모호해질 가능성이 존재
→ 예를 들어 (int id, string s = “ ”) (int id) 같은 경우 호출 시 id의 값만을 넣어준다면 둘 중 어느 함수를 호출 해야할지 모호해짐