반응형
함수 오버로딩 (overloading)
• 동일한 이름의 함수명이 여러개 중복 정의되어 있는 형태
• 함수 파라미터(parameter) 자료형 혹은 개수가 다르다.
• C 언어에서는 동일한 이름의 함수 정의를 허용하지 않는다. (컴파일 오류)
하지만 C++에서는 함수 중복 정의 허용
void sub(int n) { … }
void sub(char* str) { … }
void sub(void) { … }
void sub(int n, char* str) { … }
오버로딩(중복 정의)이 안되는 경우
리턴 타입만 다른 경우
int sub(void) { … }
void sub(void) { … }
디폴트 파라미터(default parameter) 활용
중복 정의는 되지만 모호한 호출 오류 발생
void sub(void) { … }
void sub(int n = 5) { … }
모호한 레퍼런스 타입 활용
중복정의는 되지만 호출 오류 발생
int sub(int& rn) { … }
int sub(int n) { … }
포인터 인수 + 배열 인수
void sub(char* ptr) { … }
void sub(char str[]) { … }
void sub(const char* ptr) { … } // 중복정의 가능
const가 있는 value 인수 + 일반 value 인수
void sub(const int n) { … }
void sub(int n) { … }
예제
Stream 구조체로 다양한 타입 출력
#include <stdio.h>
#include <iostream>
using namespace std;
struct Stream
{
void printf(int n);
void printf(char c);
void printf(double d);
void printf(const char* s);
};
void Stream::printf(int n)
{
// printf("%d", n); error
::printf("%d", n);
}
void Stream::printf(char c)
{
::printf("%c", c);
}
void Stream::printf(double d)
{
::printf("%lf", d);
}
void Stream::printf(const char* s)
{
::printf("%s", s);
}
int main(void) {
Stream c;
c.printf(5);
c.printf('A');
c.printf(3.14);
c.printf("seoul");
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 인라인(inline) 함수 (0) | 2022.08.06 |
---|---|
[C++] 디폴트 파라미터(default parameter) (0) | 2022.08.05 |
[C++] [STL] next_permutation (0) | 2022.01.05 |
[C++] sort() 함수란? (0) | 2022.01.01 |
stable_sort()와 sort() 차이 알아보기 (0) | 2022.01.01 |
댓글