![article thumbnail image](https://blog.kakaocdn.net/dn/CYg2e/btqA56ZktHU/ANPiffOkCVeUmk4prnPSG1/img.png)
반응형
01-2
1. 다음 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;
}
30 20
Z A
5.555 1.111
더보기
![](https://blog.kakaocdn.net/dn/CYg2e/btqA56ZktHU/ANPiffOkCVeUmk4prnPSG1/img.png)
#include <iostream>
void swap(int * a, int * b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void swap(char * a, char * b)
{
char tmp = *a;
*a = *b;
*b = tmp;
}
void swap(double * a, double * b)
{
double tmp = *a;
*a = *b;
*b = tmp;
}
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;
}
![](https://blog.kakaocdn.net/dn/CYg2e/btqA56ZktHU/ANPiffOkCVeUmk4prnPSG1/img.png)
01-3
1. 예제 DefaultValue3.cpp에 정의된 함수 BoxVolume을 '매개변수의 디폴트 값 지정' 형태가 아닌, '함수 오버로딩'의 형태로 재구현해 보자. 물론 main 함수는 변경하지 않아야 하며, 실행 결과도 동일해야 한다.
#include<iostream>
int BoxVolume(int length, int width=1, int height=1);
int main(void)
{
std::cout<<"[3, 3, 3] : "<<BoxVolume(3, 3, 3)<<std::endl;
std::cout<<"[5, 5, D] : "<<BoxVolume(5, 5)<<std::endl;
std::cout<<"[7, D, D] : "<<BoxVolume(7)<<std::endl;
// std::cout<<"[D, D, D] : "<<BoxVolume()<<std::endl;
return 0;
}
int BoxVolume(int length, int width, int height)
{
return length*width*height;
}
더보기
![](https://blog.kakaocdn.net/dn/4pMYS/btqA3dSofKR/f3DqykyzhSAHyVLGLbvVXk/img.png)
#include<iostream>
int BoxVolume(int length, int width, int height)
{
return length * width * height;
}
int BoxVolume(int length, int width)
{
return length * width;
}
int BoxVolume(int length)
{
return length;
}
int main(void)
{
std::cout << "[3, 3, 3] : " << BoxVolume(3, 3, 3) << std::endl;
std::cout << "[5, 5, D] : " << BoxVolume(5, 5) << std::endl;
std::cout << "[7, D, D] : " << BoxVolume(7) << std::endl;
// std::cout<<"[D, D, D] : "<<BoxVolume()<<std::endl;
return 0;
}
![](https://blog.kakaocdn.net/dn/4pMYS/btqA3dSofKR/f3DqykyzhSAHyVLGLbvVXk/img.png)
2. 다음과 같은 형태로의 함수 오버로딩은 문제가 있다. 어떠한 문제가 있는지 설명해 보자.
int SimpleFunc(int a=10)
{
return a+1;
}
int SimpleFunc(void)
{
return 10;
}
더보기
매개변수의 디폴트 값의 경우, 아무런 매개변수가 들어오지 않았을 때 기본 값을 정해 주는 것이다. 이를 지정해 놓고 오버로딩을 통해 아무것도 받지 않는 함수를 만들어 버린다면, 앞서 디폴트 값을 지정해 준 것에 대한 의미가 사라진다.
또한 SimpleFunc(); 를 통해 호출했을 때, 두 함수 모두 조건을 만족하기 때문에 오류가 발생한다.
반응형