
Question
다음 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
실행의 예와 같이 나오려면 <num1, num2>, <ch1, ch2>, <db1, db2> 괄호 안의 값을 각각 교환을 해주게끔 해야한다. 그러니까..
<num1, num2> -> <num2, num1>
<ch1, ch2> -> <ch2, ch1>
<db1, db2> -> <db2, db1>
이렇게 말이다.
main 함수를 보면 swap함수를 호출할 때, 인자를 각 변수의 위치로 지정하고 있다. 따라서 이것을 보아하니 '포인터'를 활용하면 되겠다고 생각이 들 것이다.
#include <iostream>
void swap(int * ptr1, int * ptr2) {
int temp = * ptr1;
* ptr1 = * ptr2;
* ptr2 = temp;
}
void swap(char * ptr1, char * ptr2) {
char temp = * ptr1;
* ptr1 = * ptr2;
* ptr2 = temp;
}
void swap(double * ptr1, double * ptr2) {
double temp = * ptr1;
* ptr1 = * ptr2;
* ptr2 = 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;
}
포인터를 활용해 각 인자에 맞는 swap함수 3가지를 만들어준다.