2. [C++] 함수 오버로딩
2024. 4. 11. 11:03ㆍ[C++]/C++ 언어 기초
함수 오버로딩
int MyFunc(int num)
{
num++;
return num
}
int MyFunc(int a, int b)
{
return a+b;
}
int main(void){
MyFunc(20);
MyFunc(30, 40);
return 0;
}
- 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하다.
- C++에서는 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의를 허용할 수 있다. 이를 "함수 오버로딩"이라고 한다.
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){...}
- 하지만 이 예시는 반환형은 다르지만, 매개변수는 같다.
- 반환형은 함수 호출 시, 호출되는 함수를 구분하는 기준이 되지 않으므로 컴파일 오류가 발생한다.
#include "stdafx.h"
#include <iostream>
using namespace System;
using namespace std;
void MyFunc(void){
cout<<"MyFunc(void) Called"<<endl;
}
void MyFunc(char c){
cout<<"MyFunc(char c) Called"<<endl;
}
void MyFunc(int a, int b){
cout<<"MyFunc(int a, int b) Called"<<endl;
}
int main(array<System::String ^> ^args)
{
MyFunc();
MyFunc('A');
MyFunc(12, 13);
return 0;
}
문제 풀이
01-2. 다음 main 함수에서 필요로 하는 swap 함수를 오버로딩 해서 구현해보자.
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;
}
내 풀이
#include "stdafx.h"
#include <iostream>
using namespace System;
void swap(int *num1, int *num2){
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void swap(char *ch1, char *ch2){
char temp = *ch1;
*ch1 = *ch2;
*ch2= temp;
}
void swap(double *dbl1, double *dbl2){
double temp = *dbl1;
*dbl1 = *dbl2;
*dbl2= temp;
}
int main(array<System::String ^> ^args)
{
int num1=20, num2=30;
std::cout<<"스왑 전 : "<<num1<<' '<<num2<<std::endl;
swap(&num1, &num2);
std::cout<<"스왑 후 : "<<num1<<' '<<num2<<std::endl<<std::endl;
char ch1='A', ch2='Z';
std::cout<<"스왑 전 : "<<ch1<<' '<<ch2<<std::endl;
swap(&ch1, &ch2);
std::cout<<"스왑 후 : "<<ch1<<' '<<ch2<<std::endl<<std::endl;
double dbl1=1.111, dbl2=5.555;
std::cout<<"스왑 전 : "<<dbl1<<' '<<dbl2<<std::endl;
swap(&dbl1, &dbl2);
std::cout<<"스왑 후 : "<<dbl1<<' '<<dbl2<<std::endl;
return 0;
}
반응형
'[C++] > C++ 언어 기초' 카테고리의 다른 글
01-06 은행계좌프로그램 실습 1단계 (0) | 2024.04.11 |
---|---|
5. [C++] 이름공간(namespace) (0) | 2024.04.11 |
4. [C++] 인라인(inline) 함수 (0) | 2024.04.11 |
3. [C++] 매개변수의 디폴트 값(Default Value) (0) | 2024.04.11 |
1. [C++] 프로젝트 세팅 및 입출력 (0) | 2024.04.08 |