C++ 오버로딩

C++/C++ 문법 2019. 11. 22. 17:44
728x90

구글링해보니 C언어로 순수 오버로딩하는 건 어렵다고 나온다. 그러므로 C++ 에서 사용된다고 이해하자.


C++ Overloading 이란 함수 이름이 같은 함수를 여러개 만들 때, 매개 변수의 정보를 다르게 하여 공통 기능의 함수를 하나로 묶어주는게 오버로딩이다.

오버로딩의 조건은

ㅇ 매개변수의 개수가 다르게 한 경우

    선언부에서 매개변수의 초기값을 미리 설정할 수 있다.

    단, 초기화는 매개변수의 오른쪽부터 순서대로 해야 유효하다.


ㅇ 매게변수의 타입을 다르게 한 경우


※ 반환형의 차이는 함수 오버로딩의 조건에 포함되지 않는다. 모호성이 발생하기 때문이다.

   void ABC(int a, int b){ ... }

   int ABC(int a, int b){ ... }


#include <iostream>

void swap(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}

void swap(double& a, double& b) {
    double tmp = a;
    a = b;
    b = tmp;
}

void swap(int* (&a), int* (&b)) {
    int *tmp = a; // 포인터에 저장된 주소값을 저장
    a = b;
    b = tmp;
}

int main() {

    int a = 10, b = 20;
    double da = 11.11, db = 22.33;
    int* pa = &a, * pb = &b;

    // 함수의 이름은 같아도 매개변수의 타입이 달라서 오버로딩 조건 성립
    swap(a, b);
    swap(da, db);
    swap(pa, pb);

    std::cout << "a : " << a << " , b : " << b << std::endl;
    std::cout << "da : " << da << " , db : " << db << std::endl;
    std::cout << "pa : " << *pa << " , pb : " << *pb << std::endl;
}



구글 이미지를 검색하면 이런 이미지를 찾을 수 있다.

함수 오버로딩과 함수 오버라이딩의 개념 차이를 그림으로 이해할 수 있다.

함수 오버라이딩은 객체간 상속 관계에서 사용되는 문법으로 함수의 이름, 매개변수, 반환 타입이 모두 일치해야 한다.

부모 클래스의 함수를 자식 클래스에서 재정의하는 것이다.


728x90

'C++ > C++ 문법' 카테고리의 다른 글

C++ 클래스 이해  (0) 2019.11.23
C++ namespace(네임스페이스)  (0) 2019.11.22
C++ 참조 변수(reference)  (0) 2019.11.22
C++ 입력(cin) 과 출력(cout)  (0) 2019.11.21
C언어 중첩 구조체(Nested structure)  (0) 2019.11.20
블로그 이미지

Link2Me

,