[01-2] 문제

김민성·2022년 7월 10일
post-thumbnail

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가지를 만들어준다.

profile
다양한 활동을 통해 인사이트를 얻는 것을 즐깁니다. 저 또한 인사이트를 주는 사람이 되고자 합니다.

0개의 댓글