오버로딩(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 |