[C++] #2 함수 오버로딩 (Function Overloading) 과 디폴트 값 (defalut value)

    반응형

    [목차]

    #1 함수 오버로딩 (Function Overloading)

    #2 디폴트 값 (default value)

     

    * 개인적인 C++ 공부 내용을 정리하는 용도로 작성된 글 이기에 잘못된 내용이 있을 수 있습니다.


    #1 함수 오버로딩 (Function Overloading)

    C언어는 함수를 "함수의 이름"을 이용해서 찾는다. 반면에 C++은 함수를 찾을 때 "함수의 이름""매개변수 선언 형태" 2가지 정보를 이용해서 찾는다.

    따라서 C++은 C언어와 달리 동일한 이름의 함수가 정의되는 것을 허용한다. (단, 매개변수의 선언 형태가 달라야 한다.) 

    이처럼 "함수의 이름"은 동일한데, "매개변수 선언"형태가 다르면 동일한 이름의 함수 정의를 허용하는 것함수 오버로딩 (Function Overloading) 이라고 부른다.

    void plus(int x, int y)
    {
    	std::cout << x + y << std::endl;
    }
    
    //Function Overloading
    void plus(int x, int y, int z)
    {
    	std::cout << x + y + z << std::endl;
    }

     

    * 단, 주의할 점은 반환형은 C++의 함수를 구분하는 기준과 전혀 관련이 없다는 것이다. 중요한 것은 "반환형"이 아닌 "매개변수의 형태" 라는 것을 조심 하도록 하자.

    void plus(int x, int y)
    {
    	std::cout << x + y << std::endl;
    }
    
    // 불가능 - 반환형은 함수 오버로딩과 관련이 없음!
    int plus(int x, int y)
    {
    	std::cout << x + y << std::endl;
    }

    #2 디폴트 값 (default Value)

    디폴트 값 이란, 매개 변수에 기본적으로 설정 되어 있는 값을 의미한다. 예를 들어 함수의 매개변수에 다음과 같은 형태로 선언하면, 함수호출 시 인자에 아무 것도 전달하지 않으면 10이 전달된 것으로 간주된다.

    void PrintValue(int x = 10)
    {
    	std::cout << "X is " << x << std::endl;
    }
    
    int main()
    {
    	PrintValue(); // 아무것도 전달 x -> 10 출력
        PrintValue(20); // 파라미터로 20 전달 x -> 20 출력
    }
    [출력결과]
    X is 10
    X is 20

     

    * 디폴트 값은 오른쪽 매개 변수 부터 채워야 한다.

    디폴트 값을 설정할 때 주의할 점은 오른쪽에 위치한 매개 변수 부터 채워야 한다는 것이다. 그 이유는 어찌보면 당연한데, 우리가 함수을 호출하는 상황을 생각해 보면 우리가 함수에 인자를 전달할 때 왼쪽 인자에서 오른쪽 인자 순으로 전달하기 때문이다.

    // O
    void Plus(int x, int y = 10)
    {
    	std::cout << x + y << endl;
    }
    
    // X
    void Plus(int x = 10, int y)
    {
    	std::cout << x + y << endl;
    }

    반응형

    댓글

    Designed by JB FACTORY