언어/Basic C++

[Basic C++] #6_오버라이딩과 오버로딩의 차이점

Hardii2 2022. 3. 7. 11:54

 

[Basic C++] #6_오버라이딩과 오버로딩의 차이점

 

C++ 개발 관련 내용 중, 오버로딩과 오버라이딩에 대해 알아보겠습니다.

"전문가를 위한 C"의 8 항목, "클래스와 객체 마스터하기"의 내용입니다.

 


 

#0. 오버로딩 vs 오버라이딩

1. 개념

  • C++의 오버로딩(Overloading)은 동일한 유효범위 내 혹은 동일한 상속 계층 내 여러 멤버 함수들이 서로 다른 시그니처를 갖고 함수 이름의 중복만 허용하는 기능입니다.
  • C++의 오버라이딩(Overriding)은 부모 클래스에서 정의한 가상 함수를 자식 클래스에서 재정의 할 수 있도록 허용하는 기능입니다. 
  • 따라서, 오버라이딩과 오버라이딩의 차이점은 동일한 스코프 내 서로 다른 함수들이 함수 시그니처 중 동일한 이름만갖고 그 외 반환 타입, 파리미터 유형, 그리고 파라미터 개수 또한 같다면 오버라이딩, 다르다면 오버로딩입니다.

 

2. 예제 코드

// 오버 로딩: 매개 변수의 타입 혹은 갯수가 다를 경우, 멤버 함수의 이름 중복을 허용 

class A
{
public:
    void Set(double val);
    void Set(const std::string& stringVal);
    ...

private:
    double x;
    std::string str;
};
// 오버라이딩: 이미 정의된 함수를 같은 이름으로 재정의 한다.

class parentClass
{
public:
    void Set(double val);
    
private:
    double x;
}

void parentClass::Set(double val)
{
    x = val;
}

class childClass : public parentClass
{
public:
    void Set(double val);
    
private:
    double x;
}

// 같은 이름의 함수를 재정의
void childClass::Set(double val)
{
    x = val * val;
}

 

3. 정리

  • 오버로딩은 동일한 스코프 내 여러 서로 다른 함수들이 동일한 함수 이름을 사용하는 것을 의미하고, 오버라이딩은 부모 클래스에서 미리 정의한 가상 함수를 자식 클래스에서 재정의 하는 것을 의미합니다.