본문 바로가기

Program Languege/C/C++

오버로딩(overloading)과 오버라이딩(overriding)의 차이점

오버로딩(overloading)과  오버라이딩(overriding)의 차이점

 

 

오버로딩

 

함수의 이름은 같지만 반환형에 상관없이 매개변수, 시그니쳐에 따라 중복 정의하는 것.

 

Ex>

     int        add(int a, int b);

     float     add(float a, float b);

     double add(double a, double b);

     void     add(int a);

     void     add(float a);

     void     add(void);

 

이름은 같지만 다 다른 함수로 정의가 가능하다. 그리고 이 때 디폴트 매개변수를 사용하면 함수 호출시에 어떤 함수의 호출인지 모호해지때문에 컴파일 에러가 발생하며 이렇게 가독성을 떨어뜨리거나 혼란을 줄 수 있는 경우는 피하길 바란다.

 

Ex>

   int   add(int a, int b = 10);

   int   add(int a);

 

   add(5);  // 두 add 함수 중에 어떤 함수 호출인지 알 수 없다.

 

 

오버 라이딩

 

상속받은 부모의 멤버 함수를 자식에서 재정의 하는 것. 반환형, 매개변수, 함수 이름 모두 같아야한다.

 

Ex>

 

class A

{

public:

    void Func()

    {

          cout << "부모 클래스 함수" << endl;

    } 

};

 

class B : public A

{

public:

    void Func()

    {

           cout << "부모 클래스 재정의 함수" << endl;

    }

};

 

이처럼 함수이름과 매개변수, 반환형이 같게 정의하면 된다.

 

 

 

차이점.

 

 

 -

 매개변수

반환형 

 상속 관계

 함수이름

복수 정의 

오버로딩   자료형이나 수가 달라야한다.  상관없다.  없음.  같다.

 복수 정의 가능.

오버라이딩

 같아야한다.

 같아야한다.

 있음.  같다.

 단 한 개만 존재.

 

 

 

'Program Languege > C/C++' 카테고리의 다른 글

순수 가상함수  (0) 2013.03.19
가상함수  (0) 2013.03.19
std::string  (0) 2013.03.18
구조체 (struct)  (0) 2013.02.27
printf() scanf()  (0) 2013.02.27