C++ 오버로딩

다형성

하나의 표현으로 여러개의 유형을 나타내는 방법으로 객체 지향 프로그래밍 에서는 다양한 유형 의 엔터티(기능)에 대한 단일 인터페이스를 제공하는 것이다. 이 개념은 유기체나 종이 다양한 형태나 단계를 가질 수 있다는 생물학의 원리에서 빌려온 것이라고 한다[1]


  1. 출처 위키백과 ↩︎

함수 오버로딩

다형성을 구현하는 방법중 하나로,
같은 이름을 사용하는 함수를 여러개 설정해서 마치 하나의 함수로 여러 기능을 사용하는 효과를 줄 수 있는것

당연하게 하나의 의문이 생긴다. 함수 호출은 이름으로 하는데 이름이 같다면 어떻게 구분하는가?

매개변수로 한다. 매개변수 개수부터, 자료형을 다르게 설정하면 컴파일러가 알맞게 설정해준다.

#include <iostream>

int add(int i, int j){
    return (i+j);
}
double add(double i, double j){
    return (i+j);
}
int add(int i, int j, int k){
    return (i+j+k);
}

int main()
{
    std::cout<<add(1,2)<<std::endl;
    std::cout<<add(6.5, 3.8)<<std::endl;
    std::cout<<add(1,2,3)<<std::endl;
    return 0;
}
매개변수 자료형을 다르게 설정해 오버로딩

여기서 add함수는 3개다. 정수형이 들어온 함수, 실수형이 들어온 함수, 매개변수가 3개인 함수.
함수 오버로딩을 지원하지 않는다면 add_int, add_double, add_3으로 나누어 사용했어야 하는걸 합쳐 사용할 수 있게 된다.

사용하는 이유

  1. 기본값 지정
    함수에 매개변수가 들어오지 않았을때 기본값을 지정하는 경우 유용하게 사용 할 수 있다.
  2. 각자 다른 자료형에 대한 대응
    위 예시처럼 입력받은 자료형에 따라 처리하는 방법이 다른경우 유용하게 사용할 수 있다.
  3. Templete(Generic)
    나중에 포스팅할 템플릿(java나 C#에서는 제네릭)문법에서 사용한다.