none
c++로 함수 오버로딩을 하는데 double이나 float를 이용하는 함수는 선언이 잘못되었다고 하네요 RRS feed

  • 질문

  • 절대값을 구하는 소스를 만드는데

    #include <iostream>
    using namespace std;
    int abs(int num)
    {
    if (num<0)
    num = -num;
    return num;
    }
    double abs(double num)
    {
    if (num<0)
    num = -num;
    return num;
    }
    long int agx(long int num)
    {
    if (num<0)
    num = -num;
    return num;
    }
    void main()
    {
    int a = -10;
    cout << a << "의 절대값은->" << abs(a) << endl;
    double b = -3.4;
    cout << b << "의 절대값은->" << abs(b) << endl;
    long int c = -20L;
    cout << c << "의 절대값은->" << abs(c) << endl;
    }

    이 소스를 그대로 이용하면 double을 이용한 abs함수의 선언이 잘못되었다네요 어떻게 수정하면 될까요?

    2016년 1월 14일 목요일 오전 6:53

답변

  • #include <iostream>
    #include <stdlib.h>
     using namespace std;
     int abs(int num)
     {
    if (num<0)
    num = -num;
    return num;
     }
     double abs(double num)
     {
    if (num<0)
    num = -num;
    return num;
     }
     long int agx(long int num)
     {
    if (num<0)
    num = -num;
    return num;
     }
    int main(void) //이 부분
    {
     int a = -10;
     cout << a << "의 절대값은->" << abs(a) << endl;
    double b = -3.4;
    cout << b << "의 절대값은->" << abs(b) << endl;
    long int c = -20L;
    cout << c << "의 절대값은->" << abs(c) << endl;
    system("PAUSE");
     }

    바꾼게 main 리턴 타입이랑 매개변수 값만 int형 void로 바꿨습니다. 아마 리눅스에서는 main함수의 타입이 void 허락이 안되나 봅니다.


    함수 오버로딩에 대해서 설명 하자면 무조건 매개변수의 타입이나 갯수가 달라야 오버로딩으로 인정이 됩니다. 함수의 리턴 타입만 달라서는 인정이 안됩니다.
    • 편집됨 mosehun 2016년 1월 14일 목요일 오후 6:21
    • 답변으로 표시됨 Boram YiModerator 2016년 1월 26일 화요일 오전 2:53
    2016년 1월 14일 목요일 오후 6:19