함수 오버로딩
함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하기 때문에 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의를 허용할 수 있다 (하지만 C언어에서는 불가능했다)
#include <iostream>
int MyFunc(int num)
{
num++;
return num;
}
int MyFunc(int a, int b)
{
return a + b;
}
int main(void)
{
MyFunc(20); // MyFunc(int num) 함수 호출
MyFunc(30, 40); // MyFunc(int a, int b) 함수 호출
return 0;
}
*C언어에서의 함수를 찾는 법
'함수의 이름'만 이용해서 호출대상을 찾는다
*C++에서의 함수를 찾는 법
'함수의 이름'과 '매개변수'를 같이 이용해서 호출대상을 찾는다
함수 오버로딩의 예
함수의 오버로딩이 가능 하려면 매개변수의 선언이 달라야 한다.
int MyFunc(char c) {....};
int MyFunc(int n) {....};
==> 매개변수의 자료형이 다르다 (가능)
int MyFunc(int n) {....};
int MyFunc(int n1, int n2) {....};
==> 매개변수의 개수가 다르다 (가능)
void MyFunc(int n){....};
int MyFunc(int n){....};
==> 함수의 반환형이 다르다 (불가능)
void 반환형 함수 vs 다른 반환형 함수
void 반환형 함수는 반환값 return 을 안 써줘도 되지만
다른 반환형 ( char ) 같은 경우 반환값 return 을 써주어야 한다
#include <iostream>
void swap(int *num1, int *num2) // void 반환형을 써주어야 한다
{
int temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
char swap(char* ch1, char* ch2) // 다른 반환형을 써주면 반환값을 써주어야 하니까 왠만하면 void형 쓸 것
{
char temp;
temp= *ch1;
*ch1 = *ch2;
*ch2 = temp;
return *ch1, *ch2; // return 씀
}
void swap(double *dbl1, double *dbl2)
{
double temp;
temp = *dbl1;
*dbl1 = *dbl2;
*dbl2 = temp;
}
int main(void)
{
int num1 = 20, num2 = 30;
swap(&num1, &num2);
std::cout << num1 << ' ' << num2 << std::endl;
char ch1 = 'A', ch2 = 'Z';
swap(&ch1, &ch2);
std::cout << ch1 << ' ' << ch2 << std::endl;
double dbl1 = 1.111, dbl2 = 5.555;
swap(&dbl1, &dbl2);
std::cout << dbl1 << ' ' << dbl2 << std::endl;
return 0;
}
==> 왠만하면 void 반환형을 써주자!
'C++ 이야기 (열혈) > C언어 기반의 C++' 카테고리의 다른 글
6. OOP 단계별 프로젝트 01단계 (0) | 2023.01.10 |
---|---|
5. 이름공간(namespace)에 대한 소개 (0) | 2023.01.10 |
4. 인라인(inline) 함수 (0) | 2023.01.02 |
3. 매개변수의 디폴트 값 (Default Value) (0) | 2023.01.02 |
1. printf와 scanf를 대신하는 입출력 방식 (0) | 2022.12.27 |