profile image

L o a d i n g . . .

반응형

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
더보기
#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;
}

 

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;
}
더보기
#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;
}

 

2. 다음과 같은 형태로의 함수 오버로딩은 문제가 있다. 어떠한 문제가 있는지 설명해 보자.

int SimpleFunc(int a=10)
{
    return a+1;
}

int SimpleFunc(void)
{
    return 10;
}
더보기

매개변수의 디폴트 값의 경우, 아무런 매개변수가 들어오지 않았을 때 기본 값을 정해 주는 것이다. 이를 지정해 놓고 오버로딩을 통해 아무것도 받지 않는 함수를 만들어 버린다면, 앞서 디폴트 값을 지정해 준 것에 대한 의미가 사라진다.

또한 SimpleFunc(); 를 통해 호출했을 때, 두 함수 모두 조건을 만족하기 때문에 오류가 발생한다.

 

반응형
복사했습니다!